mysql.user表是MySQL钟最重要的一个权限表,用来记录允许连接到服务器的账号信息,在user表中启用的所有权限都是全局级的,适用于所有数据库。
用desc user命令可以看到user表的结构。
user表钟的字段大致可以分为4类,分别是用户列、权限列、安全列和资源控制列。
1. 用户列存储了用户连接MySQL数据库时需要输入的信息,包含三个列:host、user、password(MySQL5.7之后,password字段改为authentication_string了),当用户登陆时,这3个字段同时匹配,才允许其登陆;
2. 权限列的字段决定了用户的权限,用来描述在全局范围内允许对数据和数据库进行的操作。权限大致分为两类:
1)高级管理权限:主要对数据库进行管理,例如关闭服务的权限、超级权限和加载用户等
2)普通权限:主要操作数据库,例如查询权限、修改权限等;
若要修改权限,可以使用grant语句或revoke语句进行修改,也可以直接使用update语句更新user表中的信息;
3. 安全列主要用来判断用户是否能够登录成功;通常标准的发行版不支持ssl,可以使用show variables like "have_openssl"语句来查看是否具有ssl功能,若值为disable,则不支持ssl加密;
4. 资源控制列的字段用来限制用户使用的资源;
MySQL中创建用户有三种方法:
1. 使用create user语句;
可以使用help create user命令查看语法。
如:create user test identified by '123456';
2. 使用grant语句;
可以使用help grant命令查看语法。
如:grant all privileges on *.* to 'test'@'localhost' identified by '123456';
3. 使用insert语句向user表中添加记录;
如:insert into user(host,user,authentication_string,select_priv,insert_priv,update_priv,ssl_cipher,x509_issuer,x509_subject) values ('localhost','test',password('123456'),'Y','Y','Y','NULL','NULL','NULL');
查看用户相关权限:
1. 通过mysql.user表可以获取用户的全局权限;
2. 通过mysql.db表可以获取用户针对某一数据库的权限;
3. 通过mysql.tables_priv表可以获取用户针对某一表的权限;
4. 通过mysql.columns_priv表可以获取用户针对某一表中某一列的权限;
还有procs_priv和proxies_priv表中也保存了相关的权限信息。
可以使用show create user语句查看用户创建语句;
可以使用grant / revoke语句或update user表语句修改用户权限。
可以使用alter user语句修改用户。
可以使用drop user语句或delete from user表语句删除用户;