1 权限管理
权限管理主要是对登录到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MySQL服务器带来安全隐患。
MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。
1.1 MySQL的各种权限
账户权限信息被存储在MySQL数据库的user、db、host、tables_priv、column_priv和procs_priv表中。MySQL启动时,服务器将这些数据库表中的权限信息的内容读入内存。
GRANT和REVOKE语句所涉及的权限的名称如下:
(1)CREATE和DROP权限,可以创建新数据库和表,或删除已有数据库和表。
(2)SELECT、INSERT、UPDATE和DELETE权限,允许在数据库表上进行操作
(3)INDEX权限允许创建或删除索引
(4)ALTER,允许更改表的结构和重命名表
(5)CREATE ROUTINE,创建保存函数和程序
(6)GRANT,允许授权给其他用户
(7)FILE权限,允许用户能读或写MySQL服务器上的任何文件。
1.2 授权
授权就是为某个用户授予权限。授予的权限可以分为多个层级:
(1)全局层级
适用于一个给定服务器中的所有数据库,权限存储在mysql.user表中,例如GRANT ALL ON *.*和REVOKE ALL ON *.*
(2)数据库层级
…一个给定数据库中的所有目标。…mysql.db和mysql.host表…,GRANT ALL ON db_name.和REVOKE ALL ON db_name.
(3)表层级
…给定表中的所有列。…mysql.table_priv表。GRANT ALL ON db_name.tbl_name 和REVOKE ALL ON db_name.tbl_name…
(4)列层级
…一个给定表中的单一列。…mysql.columns_priv表。
(5)子程序层级
…
例子:使用GRANT语句创建一个新的用户grantUser,密码为‘grantpwd’。用户grantUser对所有的数据有查询、插入权限。并授于GRANT权限
GRANT SELECT,INSERT ON *.* TO 'grantUser'@'localhost'
IDENTIFIED BY 'grantpwd'
WITH GRANT OPTION;
1.3 收回权限
收回权限就是取消已经赋予用户的某些权限。MySQL中使用REVOKE语句取消用户的某系权限。
(1)收回用户所有权限
REVOKE ALL PRIVILEGES,GRANT OPTION
FROM 'user'@'host'[,'user'@'host'...]
(2)收回用户指定权限
REVOKE pri_type [(columns)][,priv_type[(columns)]]...
ON table1,table2,...,tablen
FROM 'user'@'host'[,'user'@'host'...]
priv_type:表示权限类型
columns:表示权限作用于哪些列上,默认作用域整个表
table1,table2,…,tablen:表示从那个表中收回权限
‘user’@’host’:表示用户账户
(3)例子,取消用户testUser的更新权限
mysql> REVOKE UPDATE ON *.* FROM 'testUser'@'localhost';
Query OK, 0 rows affected
mysql> SELECT Host,User,Select_priv,Update_priv,Grant_priv FROM mysql.user WHERE user='testUser';
+-----------+----------+-------------+-------------+------------+
| Host | User | Select_priv | Update_priv | Grant_priv |
+-----------+----------+-------------+-------------+------------+
| localhost | testUser | Y | N | N |
+-----------+----------+-------------+-------------+------------+
1 row in set
1.4 查看权限
SHOW GRANTS FOR 'user'@'host';
例如查看testUser用户d权限信息:
mysql> SHOW GRANTS FOR 'testUser'@'localhost';
+------------------------------------------------------------------------------------------------------------------+
| Grants for testUser@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'testUser'@'localhost' IDENTIFIED BY PASSWORD '*633B5898492ADFB22FB272BD8F047574F383F043' |
+------------------------------------------------------------------------------------------------------------------+
1 row in set
2 访问控制
正常情况下,并不希望每个用户都可以执行所有的数据库操作。当MySQL允许一个用户执行各种操作时,它将首先核实该用户向MySQL服务器发送的连接请求,然后确认用户的操作请求是否被允许。
2.1 连接核实阶段
即客户端用户向服务器提供用户名、密码、主机地址,进行连接核实。
2.2 请求核实阶段
即对连接上的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。
2.3 图解
说明
阅读《MySQL5.5 从零开始学》笔记摘抄。