十、权限与安全
一、MYSQL权限系统的工作原理
-
对连接到数据库的用户进行身份认证,以此来判断此用户是否属于合法用户,合法的用户通过认证,不合法的用户拒绝与之连接。
-
对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作
具体说明:
-
身份认证:
对于身份认证,MYSQL是通过IP地址和用户名进行身份认证,也就是说,如果同一 个用户来自不同的IP地址,则MYSQL将其视为不同的用户。
-
权限表层级
当用户进行连接时,权限表的存取过程有两个阶段
1、先从 user 表中的 host、user 和 password 这三个字段中判断连接的IP、用户名和密码是否存在于 表中,如果存在,则通过身份验证,否则拒绝连接
2、如果通过身份验证,则按照权限表的顺序得到数据库权限:user->db->tables_priv->columns_priv。在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限
3、当用户通过权限认证,进行权限分配时,先检查全局权限表uer,如果user中对应权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db,tables_priv和columns_priv。如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限,依次往下,直到columns_priv表权限取出为止。
二、账号管理
-
GRANT: 授予访问权限
-
REVOKE: 撤销访问权限
1、创建用户
CREATE USER '用户名'@'IP地址' IDENTIFIED BY 密码
示例:
2、授权用户
GRANT 权限类型1,权限类型2.。。。 ON [表名 或 * 或 *.* 或 db_name.*] to 用户名@ip地址
示例1:
示例2:
提示:
-
常见的权限有 SELECT, INSERT, UPDATE, DELETE
-
ON后面的*.*表示对所有库的所有表拥有权限,如果你只想让这个用户只对某个数据库有权限,可以将*.*改为 数据库名.*
3、撤销权限
REVOKE 权限类型1,权限类型2 ... ON [表名 或 * 或 *.* 或 db_name.*] FROM 用户名@ip地址
示例:
4、查看某个用户的权限
SHOW GRANTS FOR 用户名@IP地址
示例: