user表在名为“mysql”的数据库中。mysql在安装时会自动创建一个名为“mysql”的数据库,mysql数据库中存储的都是用户权限表;而user表是mysql数据库中最重要的一个权限表,用来记录允许连接到服务器的账号信息。user表里启用的所有权限都是全局级的,适用于所有数据库。
本教程操作环境:windows7系统、mysql8版本、dell g3电脑。
user表在名为“mysql”的数据库中。
mysql 在安装时会自动创建一个名为 mysql 的数据库,mysql 数据库中存储的都是用户权限表。用户登录以后,mysql 会根据这些权限表的内容为每个用户赋予相应的权限。
user 表是 mysql 中最重要的一个权限表,用来记录允许连接到服务器的账号信息。需要注意的是,在 user 表里启用的所有权限都是全局级的,适用于所有数据库。
user 表中的字段
user 表中的字段大致可以分为 4 类,分别是用户列、权限列、安全列和资源控制列,下面主要介绍这些字段的含义。
用户列
用户列存储了用户连接 mysql 数据库时需要输入的信息。需要注意的是 mysql 5.7 版本不再使用 password 来作为密码的字段,而改成了 authentication_string。
mysql 5.7 版本的用户列如表 1 所示。
字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
---|---|---|---|---|
host | char(60) | no | 无 | 主机名 |
user | char(32) | no | 无 | 用户名 |
authentication_string | text | yes | 无 | 密码 |
用户登录时,如果这 3 个字段同时匹配,mysql 数据库系统才会允许其登录。创建新用户时,也是设置这 3 个字段的值。修改用户密码时,实际就是修改 user 表的 authentication_string 字段的值。因此,这 3 个字段决定了用户能否登录。
权限列
权限列的字段决定了用户的权限,用来描述在全局范围内允许对数据和数据库进行的操作。
权限大致分为两大类,分别是高级管理权限和普通权限:
- 高级管理权限主要对数据库进行管理,例如关闭服务的权限、超级权限和加载用户等;
- 普通权限主要操作数据库,例如查询权限、修改权限等。
user 表的权限列包括 select_priv、insert_ priv 等以 priv 结尾的字段,这些字段值的数据类型为 enum,可取的值只有 y 和 n:y 表示该用户有对应的权限,n 表示该用户没有对应的权限。从安全角度考虑,这些字段的默认值都为 n。
字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
---|---|---|---|---|
select_priv | enum('n','y') | no | n | 是否可以通过select 命令查询数据 |
insert_priv | enum('n','y') | no | n | 是否可以通过 insert 命令插入数据 |
update_priv | enum('n','y') | no | n | 是否可以通过update 命令修改现有数据 |
delete_priv | enum('n','y') | no | n | 是否可以通过delete 命令删除现有数据 |
create_priv | enum('n','y') | no | n | 是否可以创建新的数据库和表 |
drop_priv | enum('n','y') | no | n | 是否可以删除现有数据库和表 |
reload_priv | enum('n','y') | no | n | 是否可以执行刷新和重新加载mysql所用的各种内部缓存的特定命令,包括日志、权限、主机、查询和表 |
shutdown_priv | enum('n','y') | no | n | 是否可以关闭mysql服务器。将此权限提供给root账户之外的任何用户时,都应当非常谨慎 |
process_priv | enum('n','y') | no | n | 是否可以通过show processlist命令查看其他用户的进程 |
file_priv | enum('n','y') | no | n | 是否可以执行select into outfile和load data infile命令 |
grant_priv | enum('n','y') | no | n | 是否可以将自己的权限再授予其他用户 |
references_priv | enum('n','y') | no | n | 是否可以创建外键约束 |
index_priv | enum('n','y') | no | n | 是否可以对索引进行增删查 |
alter_priv | enum('n','y') | no | n | 是否可以重命名和修改表结构 |
show_db_priv | enum('n','y') | no | n | 是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库 |
super_priv | enum('n','y') | no | n | 是否可以执行某些强大的管理功能,例如通过kill命令删除用户进程;使用set global命令修改全局mysql变量,执行关于复制和日志的各种命令。(超级权限) |
create_tmp_table_priv | enum('n','y') | no | n | 是否可以创建临时表 |
lock_tables_priv | enum('n','y') | no | n | 是否可以使用lock tables命令阻止对表的访问/修改 |
execute_priv | enum('n','y') | no | n | 是否可以执行存储过程 |
repl_slave_priv | enum('n','y') | no | n | 是否可以读取用于维护复制数据库环境的二进制日志文件 |
repl_client_priv | enum('n','y') | no | n | 是否可以确定复制从服务器和主服务器的位置 |
create_view_priv | enum('n','y') | no | n | 是否可以创建视图 |
show_view_priv | enum('n','y') | no | n | 是否可以查看视图 |
create_routine_priv | enum('n','y') | no | n | 是否可以更改或放弃存储过程和函数 |
alter_routine_priv | enum('n','y') | no | n | 是否可以修改或删除存储函数及函数 |
create_user_priv | enum('n','y') | no | n | 是否可以执行create user命令,这个命令用于创建新的mysql账户 |
event_priv | enum('n','y') | no | n | 是否可以创建、修改和删除事件 |
trigger_priv | enum('n','y') | no | n | 是否可以创建和删除触发器 |
create_tablespace_priv | enum('n','y') | no | n | 是否可以创建表空间 |
如果要修改权限,可以使用 grant 语句为用户赋予一些权限,也可以通过 update 语句更新 user 表的方式来设置权限。
安全列
安全列主要用来判断用户是否能够登录成功,user 表中的安全列如表 3 所示:
字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
---|---|---|---|---|
ssl_type | enum('','any','x509','specified') | no | 支持ssl标准加密安全字段 | |
ssl_cipher | blob | no | 支持ssl标准加密安全字段 | |
x509_issuer | blob | no | 支持x509标准字段 | |
x509_subject | blob | no | 支持x509标准字段 | |
plugin | char(64) | no | mysql_native_password | 引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户 |
password_expired | enum('n','y') | no | n | 密码是否过期 (n 未过期,y 已过期) |
password_last_changed | timestamp | yes | 记录密码最近修改的时间 | |
password_lifetime | smallint(5) unsigned | yes | 设置密码的有效时间,单位为天数 | |
account_locked | enum('n','y') | no | n | 用户是否被锁定(y 锁定,n 未锁定) |
注意:即使 password_expired 为“y”,用户也可以使用密码登录 mysql,但是不允许做任何操作。
通常标准的发行版不支持 ssl,读者可以使用 show variables like "have_openssl" 语句来查看是否具有 ssl 功能。如果 have_openssl 的值为 disabled,那么则不支持 ssl 加密功能。
资源控制列
资源控制列的字段用来限制用户使用的资源,user 表中的资源控制列如表 4 所示。
字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
---|---|---|---|---|
max_questions | int(11) unsigned | no | 0 | 规定每小时允许执行查询的操作次数 |
max_updates | int(11) unsigned | no | 0 | 规定每小时允许执行更新的操作次数 |
max_connections | int(11) unsigned | no | 0 | 规定每小时允许执行的连接操作次数 |
max_user_connections | int(11) unsigned | no | 0 | 规定允许同时建立的连接次数 |
以上字段的默认值为 0,表示没有限制。一个小时内用户查询或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时才可以在此执行对应的操作。可以使用 grant 语句更新这些字段的值。
怎么访问user表
1、连接到mysql数据库,查看默认所有数据库信息
2、因为user表存在于mysql数据库中,可以通过use命令来切换数据库
切换数据库之后通过show命令可以查看数据库中所有的数据表,在最后可以看到user数据表
通过desc命令可以查看user表的结构信息,因为user表所包含的信息比较多所以结构信息也比较多
在默认没有创建其它用户的情况下,只有超级管理员的信息
【相关推荐:mysql视频教程】
以上就是mysql的user表在哪的详细内容,更多请关注其它相关文章!