码迷,mamicode.com
首页 > 数据库 > 详细

32.MySQL中的权限管理

时间:2020-05-21 14:45:07      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:revoke   视图   变量   item   read   自动   权限表   table   复制   

1.授予权限

权限信息根据其作用范围,分别存储在mysql数据库中的不同数据表中。

当MySQL启动时会自动加载这些权限信息,并将这些权限信息读取到内存中。

数据表描述
user 保存用户被授予的全局权限
db 保存用户被授予的数据库权限
tables_priv 保存用户被授予的表权限
columns_priv 保存用户被授予的列权限
procs_priv 保存用户被授予的存储过程权限
proxies_priv 保存用户被授予的代理权限

根据权限的操作内容可将权限大致分为数据权限结构权限以及管理权限

数据权限

权限权限级别描述
SELECT 全局、数据库、表、列 SELECT
UPDATE 全局、数据库、表、列 UPDATE
DELETE 全局、数据库、表 DELETE
INSERT 全局、数据库、表、列 INSERT
SHOW DATABASES 全局 SHOW DATABASES
SHOW VIEW 全局、数据库、表 SHOW CREATE VIEW
PROCESS 全局 SHOW PROCESSLIST

结构权限

权限权限级别描述
DROP 全局、数据库、表 允许删除数据库、表和视图
CREATE 全局、数据库、表 创建数据库、表
CREATE ROUTINE 全局、数据库 创建存储过程
CREATE TABLESPACE 全局 允许创建、修改或删除表空间和日志文件组
CREATE TEMPORARY TABLES 全局、数据库 CREATE TEMPORARY TABLE
CREATE VIEW 全局、数据库、表 允许创建或修改视图
ALTER 全局、数据库、表 ALTER TABLE
ALTER ROUTINE 全局、数据库、存储过程 允许删除或修改存储过程
INDEX 全局、数据库、表 允许创建或删除索引
TRIGGER 全局、数据库、表 允许触发器的所有操作
REFERENCES 全局、数据库、表、列 允许创建外键

管理权限

权限权限级别描述
SUPER 全局 允许使用其他管理操作,如CHANGE MASTER TO等
CREATE USER 全局 CREATE USER、DROP USER、 RENAME USER 和REVOKEALL PRIVILEGES
GRANT OPTION 全局、数据库、表、存储过程、代理 允许授予或删除用户权限
RELOAD 全局 FLUSH操作
PROXY 全局 与代理的用户权限相同
REPLICATION CLIENT 全局 允许用户访问主服务器或从服务器
REPLICATION SLAVE 全局 允许复制从服务器读取的主服务器二进制日志事件
SHUTDOWN 全局 允许使用mysqladmin shutdown
LOCK TABLES 全局、数据库 允许在有SELECT表权限上使用LOCK TABLES

权限级别指的就是权限可以被应用在哪些数据库的内容中。

例如,SELECT权限可以被授予到全局(任意数据库下的任意内容)、数据库(指定数据库下的任意内容)、表(指定数据库下的指定数据表)、列(指定数据库下的指定数据表中的指定字段)。

语法

1 GRANT 权限类型 [字段列表][, 权限类型 [字段列表]] ...
2 ON [目标类型] 权限级别
3 TO 账户名 [用户身份验证选项] [, 账户名 [用户身份验证选项]] ...
4 [REQUIRE 连接方式]
5 [WITH {GRANT OPTION | 资源控制选项}]

权限类型:指的就是SELECT、DROP、CREATE等权限。

字段列表:用于设置列权限。

目标类型:默认为TABLE,表示将全局、数据库、表或列中的某些权限授予给指定的用户。其他值为FUNCTION(函数)或PROCEDURE(存储过程)。

权限级别:用于定义全局权限、数据库权限和表权限。

添加GRANT OPTION:表示当前账户可以为其他账户进行授权。

其余各参数均与CREATE USER中的用户选项相同,这里不再赘述。

查看root用户和test1用户的授权情况

1 SHOW GRANTS FOR root@localhost;

技术图片

技术图片

1 SHOW GRANTS FOR test1@%;

技术图片

ALL PRIVILEGES表示除GRANT OPTION(授权权限)和PROXY(代理权限)外的所有权限。

USAGE表示没有任何权限。

ON后的*.*表示全局级别的权限,即MySQL服务器下的所有数据库下的所有表,‘@‘表示任何主机中的匿名用户。

在为用户授予权限时,可以分为6个不同的级别的语法。

  1. 全局权限:GRANT权限列表 ON . TO 账户名[WITH GRANT OPTION];

  2. 数据库级权限:GRANT权限列表 ON 数据库名.* TO 账户名[WITH GRANT OPTION];

  3. 表级权限:GRANT权限列表 ON 数据库名.表名 TO 账户名[WITH GRANT OPTION];

  4. 列级权限:GRANT 权限类型 (字段列表) [,…]ON 数据库名.表名 TO 账户名[WITH GRANT OPTION];

  5. 存储过程权限:GRANT EXECUTE|ALTER ROUTINE|CREATE ROUTINE ON {[.|数据库名.* ]|PROCEDURE 数据库名.存储过程} TO 账户名 [WITH GRANT OPTION];

  6. 代理权限:GRANT PROXY ON 账户名 TO 账户名1 [, 账户名2] ...[WITH GRANT OPTION]

要想使用GRANT语句为用户授权,必须要拥有GRANT OPTION权限;且在启用read_only系统变量时,还必须要拥有SUPER权限。

授予test1用户 mahaiwuji.stu表的SELECT权限,以及对id和name字段的插入权限

1 GRANT SELECT,INSERT (id, name)
2 ON mahaiwuji.stu
3 TO test1@%;

查看权限的保存情况

1 SELECT db,table_name,table_priv,column_priv 
2 FROM mysql.tables_priv WHERE user = test1;

技术图片

1 SELECT db,table_name,column_name,column_priv
2 FROM mysql.columns_priv WHERE user=test1;

技术图片

技术图片

默认在MySQL5.7中,当GRANT 语句中指定的帐户不存在时,系统不支持自动创建用户,它会报一个在user表中找不到用户的提示信息。

例如,在为user表中不存在的test9用户授予SELECT权限。

1 GRANT SELECT ON *.* TO test9@localhost;

为了解决上述的问题,只需确保MySQL中 NO_AUTO_CREATE_USER模式未开启,就可以利用GRANT自动创建一个不存在的用户。

清空默认SQL模式

1 SET sql_mode = ‘‘;

授予权限时,创建不存在的用户

1 GRANT SELECT ON *.* TO test9@localhost;

将SQL模式修改为MySQL默认的值:

1 SET sql_mode = @@global.sql_mode;

使用GRANT创建新用户的方式已被废弃,并在未来会被移出。因此,MySQL官方推荐使用CREATE USER语句创建用户,使用ALTER USER语句修改用户的非权限选项(如验证插件、资源控制选项等),使用GRANT为新用户授予权限。

2.回收权限

在MySQL中,为了保证数据库的安全性,需要将用户不必要的权限回收

例如,数据管理员发现某个用户不应该具有DELETE权限,就应该及时将其收回。为此,MySQL专门提供了一个REVOKE语句用于回收指定用户的权限。

1 # 回收指定用户的指定权限
2 REVOKE 权限类型 [(字段列表)] [, 权限类型[(字段列表)]] …
3 ON [目标类型] 权限级别 FROM 账户名 [, 账户名]4 # 回收表7-7中的所有权限以及可为其他用户授权的权限
5 REVOKE ALL [PRIVILEGES], GRANT OPTION FROM 账户名 [, 账户名]6 # 回收用户的代理权限
7 REVOKE PROXY ON 账户名 FROM 账户名1 [, 账户名2]

回收test1用户的插入权限

1 REVOKE INSERT (name, price)
2 ON mahaiwuji.stu FROM test1@%;

3.刷新权限

刷新权限:指的是从系统数据库mysql中的权限表中重新加载用户的权限。

原因在于:GRANT、CREATE USER等操作会将服务器的缓存信息保存到内存中,而REVOKE、DROP USER操作并不会同步到内存中,因此可能会造成服务器内存的消耗,所以在REVOKE、DROP USER后推荐读者使用MySQL提供的“FLUSH PRIVILEGES”重新加载用户的权限。

1 FLUSH PRIVILEGES;

32.MySQL中的权限管理

标签:revoke   视图   变量   item   read   自动   权限表   table   复制   

原文地址:https://www.cnblogs.com/mahaiwuji/p/12930565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!