如何在mysql中管理数据库角色权限

来源:建站作者:河北彩花头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何在mysql中管理数据库角色权限》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在mysql中管理数据库角色权限》有用,将其分享出去将是对创作者最好的鼓励。

在mysql 8.0及以上版本中,角色功能被正式引入,它是一组权限的集合,能够简化多用户权限管理的复杂度,避免重复为每个用户单独分配相同权限。通过角色管理权限,只需要维护角色对应的权限集合,再将角色分配给对应用户即可,大幅提升了权限管理的效率。

如何在mysql中管理数据库角色权限

mysql角色权限管理基础操作

1. 创建角色

创建角色使用CREATE ROLE语句,角色名称可以包含主机部分,默认主机为%,表示允许从任意主机连接使用该角色。如果需要创建仅本地可用的角色,可以指定主机为localhost

-- 创建全局可读的角色,允许从任意主机使用
CREATE ROLE 'read_role';
-- 创建仅本地可用的读写角色
CREATE ROLE 'write_role'@'localhost';
-- 查看当前所有角色
SELECT * FROM mysql.user WHERE is_role = 'Y';

2. 给角色授予权限

给角色授予权限的语法和直接给用户授予权限类似,使用GRANT语句,指定权限范围、权限类型和角色名称即可。权限范围可以是全局、数据库级、表级甚至列级。

-- 给read_role角色授予所有数据库的查询权限
GRANT SELECT ON *.* TO 'read_role';
-- 给write_role角色授予test_db数据库的增删改查权限
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'write_role'@'localhost';
-- 给角色授予特定列的更新权限
GRANT UPDATE(name, age) ON test_db.user TO 'write_role'@'localhost';
-- 查看角色的权限
SHOW GRANTS FOR 'read_role';

3. 将角色分配给用户

角色创建并授予权限后,需要将角色绑定到对应的用户账号上,用户才能继承角色的权限。分配角色使用GRANT语句,后面跟上TO指定用户,可选WITH ADMIN OPTION允许用户将角色再分配给其他用户。

-- 创建测试用户
CREATE USER 'test_user'@'%' IDENTIFIED BY 'Test@123';
-- 将read_role角色分配给test_user
GRANT 'read_role' TO 'test_user'@'%';
-- 将write_role角色分配给test_user,允许用户转授角色
GRANT 'write_role'@'localhost' TO 'test_user'@'%' WITH ADMIN OPTION;
-- 查看用户拥有的角色
SELECT * FROM mysql.role_edges WHERE TO_USER = 'test_user';

4. 设置用户默认激活的角色

角色分配给用户后,默认不会自动激活,用户登录后需要手动激活角色才能使用对应权限。可以设置用户的默认角色,用户登录时自动激活这些角色。

-- 设置test_user的默认激活角色为read_role
SET DEFAULT ROLE 'read_role' TO 'test_user'@'%';
-- 设置所有分配给test_user的角色为默认激活
SET DEFAULT ROLE ALL TO 'test_user'@'%';
-- 查看用户的默认角色
SELECT * FROM mysql.default_roles WHERE USER = 'test_user';

角色权限回收与删除

1. 回收角色的权限

如果需要调整角色对应的权限,可以使用REVOKE语句回收角色的指定权限,语法和回收用户权限一致。

-- 回收read_role角色的全局查询权限
REVOKE SELECT ON *.* FROM 'read_role';
-- 回收write_role角色对test_db库的删除权限
REVOKE DELETE ON test_db.* FROM 'write_role'@'localhost';

2. 回收用户的角色

如果用户不再需要某个角色,可以从用户身上回收该角色,回收后用户不再拥有该角色的权限。

-- 从test_user身上回收write_role角色
REVOKE 'write_role'@'localhost' FROM 'test_user'@'%';

3. 删除角色

如果角色不再使用,可以使用DROP ROLE语句删除角色,删除后所有绑定该角色的用户都会自动失去该角色的权限。

-- 删除read_role角色
DROP ROLE 'read_role';
-- 删除write_role角色
DROP ROLE 'write_role'@'localhost';

注意事项

  • mysql 8.0之前的版本不支持角色功能,需要使用用户权限直接管理的方式。
  • 角色权限修改后,已经激活该角色的用户需要重新登录或者手动执行SET ROLE语句才能生效。
  • 拥有WITH ADMIN OPTION权限的用户可以回收自己拥有的角色,即使回收者没有被授予该角色的管理权限。
  • 角色名称和用户名称不能重复,否则会创建失败。

合理的角色权限划分应当遵循最小权限原则,即只给用户分配完成工作所需的最小权限集合,避免权限过大引发数据泄露或误操作风险。

mysql数据库角色权限管理grantrevoke修改时间:2026-07-13 21:00:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。