在上一篇文章【MySQL】MySQL里的用户账户和角色是什么?如何管理?中,我们了解了MySQL中用户与角色的基本管理,包括创建、删除、查看等操作。这篇文章我们来看下MySQL里对用户和角色的权限管理。
MySQL允许我们在不同级别向用户帐户授予多种类型的权限。
也就是限制这个用户在什么范围内能做哪些事儿。
访问级别有:
根据不同的访问要求的用户权限:
在全局级别授予管理权限可以启用以下活动:
动态权限是在服务器启动期间或由服务器组件或插件定义的运行时权限。 部分动态权限包括:
我们使用GRANT
语句为 MySQL 用户帐户和角色分配权限或角色。
GRANT 语句的子句包括:
示例:
下面这条语句将授予本地主机上的kari用户对 “mysql” 数据库中的 “user” 表执行 SELECT 操作的权限。
GRANT SELECT(user,host) ON mysql.user TO kari@localhost;
将角色授予 MySQL 用户帐户和其他角色时, GRANT 语句不带 ON 子句。同时,加上WITH ADMIN OPTION
子句允许用户将角色授予其他用户帐户。
示例:
下面这条语句授予了一个角色 “r_world” 两个其他角色的权限,即 “r_viewer” 和 “r_updater”。这意味着 “r_world” 角色将继承 “r_viewer” 和 “r_updater” 角色的权限,使得具有 “r_world” 角色的用户能够执行这些角色所拥有的权限。
GRANT r_viewer, r_updater TO r_world;
下面这条语句将两个角色 “r_viewer” 和 “r_updater” 的权限授予了用户 “kari” 在 “localhost” 主机上,并使用了 WITH ADMIN OPTION 子句。这意味着用户 “kari” 将获得这两个角色的权限,同时还具有管理这两个角色的能力,即可以将这些角色授予其他用户。这样的操作需要谨慎使用,只应该赋予受信任的管理员,以确保角色的安全性和适用性。
GRANT r_viewer, r_updater TO kari@localhost WITH ADMIN OPTION;
MySQL 的授权功能允许我们细粒度地管理权限,从而确保用户和角色具有适当的权限来执行数据库操作。但请务必谨慎使用,遵循最佳实践,只授予必要的权限,以降低潜在的风险。
SHOW GRANTS
显示可以自己的帐户权限。SHOW GRANTS FOR
指定帐户名称可以查看该帐户的权限。使用 REVOKE
语句可以从用户帐户和角色中撤销权限和角色。
REVOKE 语句的语法有以下子句:
在发出 REVOKE 之前,一定要使用 SHOW GRANTS
语句来确定要撤销哪些权限和角色,之后再次确认结果是否正确。
示例:
下面这条语句的作用是从用户 ‘Amon’ 在 ‘localhost’ 主机上撤销对 ‘world’ 数据库中所有表执行 DELETE、INSERT 和 UPDATE 操作的权限
REVOKE DELETE, INSERT, UPDATE ON world.* FROM 'Amon'@'localhost';
下面是从用户 ‘Sasha’ 在 ‘localhost’ 主机上撤销所有权限以及授予权限的能力。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';
在用户可以利用特定角色授予的权限之前,这些角色需要被激活。激活实际上是为特定用户启用角色,以便他们可以使用其关联的权限。
角色可以在系统的不同级别上被激活:
用户只能激活已授予他们自己的角色
将 activate_all_roles_on_login 系统变量设置为:
示例:
SET PERSIST activate_all_roles_on_login = ON;
SET DEFAULT ROLE
语句定义当用户连接到服务器时哪些角色(可以是ALL或NONE)变为活动角色。或者在 CREATE USER 或 ALTER USER 语句中使用 DEFAULT ROLE
子句。
用户级默认角色存储在 mysql.default_roles 授权表中。
示例:
SET DEFAULT ROLE r_viewer, r_updater TO kari@localhost;
ALTER USER kari@localhost DEFAULT ROLE ALL;
使用 SET ROLE
语句可以修改当前会话中的活动角色列表。 它接受角色列表或以下角色说明符之一:
好啦,这次的分享就到这里,感谢大家看到这里