MySQL8--通过角色管理权限

原文网址:MySQL8--通过角色管理权限_IT利刃出鞘的博客-CSDN博客

简介

        本文介绍MySQL8如何通过角色管理权限。

        角色是在MySQL8.0中引入的新功能。在MySQL中,角色是权限的集合,可以为角色添加或移除权限。用户可以被赋予角色,同时也被授予角色包含的权限。

        在实际应用中,为了安全性,需要给用户授予权限。当用户数量较多时,可以先将权限集合放入角色中,再赋予用户相应的角色。

查看角色

语法

跟查看用户的语法是一样的

SELECT host, user, plugin FROM mysql.user;

创建角色

语法

CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]

role_name 代表你要创建的此数据库的新用户账号
host_name 代表允许访问的主机。如果host_name省略,默认为%。如下

  • %代表通配所有host地址权限(可远程访问)
  • localhost为本地权限(不可远程访问)
  • 指定某个ip访问权限,如10.138.106.102

示例

创建名字为crudRole的角色,所有主机可访问。 

CREATE ROLE 'crudRole'@'%';

查看角色

查看角色权限

语法

SHOW GRANTS FOR 'role_name';

默认情况下,系统自动给赋予 ‘USAGE’ 权限,意思是连接登录数据库的权限。

示例

查看crudRole角色的权限

给角色赋予权限

创建角色后,默认这个角色是没有任何权限的,需要给角色授权。

语法

给角色授权的语法是:

GRANT '#auth' ON '#databaseName'.'#tableName' TO '#roleName'@'#host';

#auth 代表权限,例如

  • ALL 全部权限
  • SELECT 查询权限(单个)
  • SELECT,INSERT,UPDATE,DELETE 增删改查权限(多个权限)

#databaseName 代表数据库名

  • *代表全部库

#tableName 代表具体表,如下

  • *代表全部表
  • A,B 代表具体A,B表

#roleName 代表角色名

#host 代表允许访问的主机,如果host_name省略,默认为%。详情如下:

  • %代表通配所有host地址权限(可远程访问)
  • localhost为本地权限(不可远程访问)
  • 指定某个ip访问权限,如10.138.106.102

支持的权限有这些

示例

给crudRole角色赋予增删改查权限。

GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'crudRole'@'%';

执行完后要刷新一下权限。 

FLUSH PRIVILEGES;

查看权限

撤销角色的权限

        角色授权后,可以对角色的权限进行维护,对权限进行添加或撤销。添加权限使用GRANT语句(与角色授权相同)。撤销角色权限使用REVOKE语句。

语法如下:

REVOKE 权限1,权限2,....权限n ON TABLENAME FROM 'rolename';

给用户赋予角色

角色创建并授权后,要赋给用户并处于激活状态才能发挥作用。

语法

GRANT role [,role2,...] TO user [,user2,...];

注意:user必须是存在的用户,如果不存在先创建用户。

示例

创建用户user1

CREATE USER 'user1'@'%' IDENTIFIED BY '111111';

给user1赋予crudRole角色

GRANT crudRole TO user1;

查看user1的角色

SHOW GRANTS FOR 'user1'@'%';

激活角色

        创建了角色之后,默认都是没有被激活。只有授予的角色在会话中处于激活状态时,该用户才拥有此角色的权限。

查看激活状态

先登录user1账户(密码是111111)

查看当前角色:

SELECT CURRENT_ROLE();

可见,是没有角色。

激活角色

激活角色有两种方式:

法1:SET DEFAULT ROLE 命令

SET DEFAULT ROLE role_name TO 'user_name'@'host';

用户需重新登录。

示例

 然后user1重新登录, 然后查看角色:

法2:将ACTIVATE_ALL_ROLES_ON_LOGIN设置为 ON

SET GLOBAL activate_all_roles_on_login=ON;

上边这条语句的意思是对所有角色永久激活,运行这条语句之后用户才真正拥有了赋予角色的所有权限。

查看此变量的命令:

SHOW VARIABLES LIKE 'activate_all_roles_on_login';

撤销用户的角色

REVOKE role_name FROM user_name;

设置强制角色

        强制角色是给每个创建账户的默认角色,不需要手动设置。强制角色无法被REVOKE 或者 DROP 。

方式1:配置文件

[mysqld]
mandatory_roles='role1,role2....'

方式2:运行时设置

SET PERSIST mandatory_roles='role1,role2...';
SET GLOBAL mandatory_roles='role1,role2...';

删除角色

语法

DROP ROLE role [,role2]....

如果删除了角色,那么用户也就失去了通过这个角色所获得的所有权限。

其他网址

认真学习MySQL中的角色权限控制_流烟默的博客-CSDN博客_mysql角色权限

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/127798305