MySQL知识(二十一)——用户管理之权限管理、访问控制

来源:互联网 发布:base64 js 源码 编辑:程序博客网 时间:2024/05/06 13:24

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 OPTIONFROM 'user'@'host'[,'user'@'host'...]

  (2)收回用户指定权限

REVOKE pri_type [(columns)][,priv_type[(columns)]]...ON table1,table2,...,tablenFROM '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 affectedmysql> 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 从零开始学》笔记摘抄。

1 0