允许使用DROP TABLE
EXECUTE
允许用户运行已存储的子程序
FILE
允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX
允许使用CREATE INDEX和DROP INDEX
INSERT
允许使用INSERT
LOCK TABLES
允许对您拥有SELECT权限的表使用LOCK TABLES
PROCESS
允许使用SHOW FULL PROCESSLIST
REFERENCES
未被实施
RELOAD
允许使用FLUSH
REPLICATION CLIENT
允许用户询问从属服务器或主服务器的地址
REPLICATION SLAVE
用于复制型从属服务器(从主服务器中读取二进制日志事件)
SELECT
允许使用SELECT
SHOW DATABASES
SHOW DATABASES显示所有数据库
SHOW VIEW
允许使用SHOW CREATE VIEW
SHUTDOWN
允许使用mysqladmin shutdown
SUPER
允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。
UPDATE
允许使用UPDATE
USAGE
“无权限”的同义词
GRANT OPTION
允许授予权限
当从旧版本的MySQL升级时,要使用EXECUTE, CREATE VIEW, SHOW VIEW, CREATE USER, CREATE ROUTINE和ALTER ROUTINE权限
授权
授权就是为某个用户授予权限
授予的权限可以分为多个层级:
· 全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。
· 数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ONdb_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。
· 表层级
表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
· 列层级
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
· 子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
当后续目标是一个表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权表
使用GRANT语句创建一个新用户grantUser,密码为“grantpwd”
用户对所有的数据有查询、插入权限,并授予GRANT权限
?
GRANT SELECT ,INSERT ON *.*TO 'grantUser'@'localhost' identified BY '123456' WITH GRANT OPTION ;
?

查询显示grantUser被创建成功,并赋予了SELECT、INSERT、GRANT权限,其相应字段值为Y
被授予GRANT权限的用户可以登录MYSQL并创建其他用户帐户,在这里是grantUser的用户
收回权限
收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。
使用REVOKE收回权限之后,用户帐户的记录将从db、host、tables_priv、columns_priv表中删除,但是用户帐号记录依然
在user表中保存。
语法
?
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON [object_type] {tbl_name | * | *.* | db_name.*}
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
?
使用REVOKE语句,必须拥有mysql数据库的全局CREATE权限或UPDATE权限
使用REVOKE语句取消用户grantUser的INSERT权限
?
REVOKE INSERT ON *.* FROM 'grantUser'@'localhost';
?

可以看到grantUser用户的INSERT权限已经被收回了
注意:当从旧版本的MYSQL升级时,如果要使用EXECUTE、CREATE VIEW、SHOW VIEW、CREATE USER、CREATE ROUTINE、ALTER ROUTINE
权限,必须先升级授权表
查看权限
SHOW GRANT语句可以显示用户的权限信息
语法
?
show grants FOR 'user'@'host';
?
使用SHOW GRANT语句查询用户grantUser的权限信息
?
show grants FOR 'grantUser'@'localhost';
?

返回结果显示了user表中的帐户信息;接下来以为GRANT SELECT ON关键字开头,表示用户被授予了SELECT权限;
*.*表示SELECT权限作用于所有数据库的所有数据表;
IDENTIFIED BY 后面的为用户加密后的密码
在这里,只是定义了个别的用户权限,GRANT可以显示更加详细的权限信息,包括全局级的和非全局级的权限
如果表层级或者列层级的权限被授予用户的话,他们也能在结果中显示出来。
查看MYSQL里面匿名用户
如果有匿名用户,那么客户端就可以不用密码登录MYSQL数据库,这样就会存在安全隐患
检查匿名用户的方法
?
SELECT * FROM mysql.user WHERE `User`='';
?

如果查找到user字段值为空的那条记录,说明存在匿名用户,需要把这条记录删除
如果用匿名用户登录MYSQL就可以看到用户名是空的

删除语句
DELETE FROM mysql.user WHERE `User`=''; SELECT * FROM mysql.user WHERE `User`='';
总结
本文简单的阐述了MYSQL的用户管理和权限方面的内容,希望对大家有帮助
如果大家想更深入学习MYSQL访问控制方面的知识
可以参考这篇文章:MySQL权限的架构体系
核心就是两个图
1、客户端连接请求认证阶段

?
2、客户端操作请求认证阶段
