MySQL 必知必会
朱晓峰
前摩根大通银行技术部副总裁、系统架构师
17746 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
MySQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

18 | 权限管理:如何控制数据库访问,消除安全隐患?

你好,我是朱晓峰,今天,我来和你聊一聊权限管理。
我们在开发应用的时候,经常会遇到一种需求,就是要根据用户的不同,对数据进行横向和纵向的分组。
所谓横向的分组,就是指用户可以接触到的数据的范围,比如可以看到哪些表的数据;所谓纵向的分组,就是指用户对接触到的数据能访问到什么程度,比如能看、能改,甚至是删除。
我们把具有相同数据访问范围和程度的用户归成不同的类别,这种类别就叫角色。通过角色,管理用户对数据库访问的范围和程度就更加方便了。这也就是对用户的数据访问权限的管理。
恰当的权限设定,可以确保数据的安全性,这是至关重要的
那么,怎么进行权限管理呢?这节课,我就结合超市项目的实际案例,给你讲一下权限管理的具体操作,包括怎么操作角色和用户,怎么通过角色给用户授权,怎么直接给用户授权,从而帮助你管理好用户的权限,提升数据库的安全性。
下面我就来先讲讲角色。我们可以通过角色对相同权限的用户进行分组管理,这样可以使权限管理更加简单高效。

角色的作用

角色是在 MySQL 8.0 中引入的新功能,相当于一个权限的集合。引入角色的目的是方便管理拥有相同权限的用户。
下面我举个超市项目中的例子,来具体说明一下如何通过角色管理用户权限。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在数据库中通过角色和用户来管理访问权限的重要性和操作方法。通过创建角色并给予相应权限,可以方便地管理拥有相同权限的用户。文章详细介绍了如何操作角色,包括创建、授权、查看和删除角色,以及如何操作用户,包括创建、授权和通过角色授权用户。强调了角色在创建后默认未激活,需要手动激活才能使用,并提供了激活角色的SQL语句。总结了权限管理的方法,包括直接给用户授权和通过角色授权用户,以及建议尽量使用数据库自身的角色和用户机制来控制访问权限。最后提出了一个思考题,引导读者设计一个角色并创建用户账号,以加深对权限管理的理解。整体强调了数据库权限管理的重要性和操作方法,为读者提供了全面的概览。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 朱晓峰
    置顶
    你好,我是朱晓峰,下面我就来公布一下上节课思考题的答案: 上节课,我们学习了触发器。下面是思考题的答案: DELIMITER // CREATE TRIGGER demo.upd_importdetails AFTER UPDATE ON demo.importdetails FOR EACH ROW BEGIN UPDATE demo.importhead SET quantity = IFNULL(quantity,0) - OLD.quantity + NEW.quantity, importvalue = IFNULL(importvalue,0) - OLD.importvalue + NEW.importvalue WHERE listnumber = NEW.listnumber; END // DELIMITER ;
    2021-05-20
    1
    1
  • giteebravo
    有一点要注意,在使用 Windows + SQL Server 技术栈时,不要把操作系统的用户等同于数据库的用户。

    作者回复: 是的

    2021-04-21
    2
    4
  • giteebravo
    工作中负责的一个项目,对数据库的访问控制非常严格,屡受其害。 MySQL 的权限控制感觉非常灵活,下个版本安排上。

    作者回复: 好的

    2021-04-20
    2
  • lesserror
    既然老师指出了这个「坑」,那我必须要记录下来了。 权限这块儿的知识点,之前只是了解,实际开发中没太把权限的控制放在数据库用户上面去做。今天这节,补足了我这块之前模糊的理解。 MySQL 8.0开始支持创建权限集合的角色,用来集中管理拥有同一批权限的用户了。

    作者回复: 是的

    2021-04-20
    1
  • SharpBB
    给大家总结下: 1.操作权限 创建角色 CREATE ROLE 角色名; CREATE ROLE 'manager'@'localhost'; 不写主机名 默认是通配符% 可以从任何主机登录 角色授权 GRANT 权限 ON 表名 TO 角色名; GRANT SELECT,INSERT,DELETE,UPDATE ON demo.user TO 'manager'; 查看角色权限 SHOW GRANTS FOR 'manager'; 删除角色 DROP ROLE 角色名称; 2.操作用户 创建用户 CREATE USER 用户名 [IDENTIFIED BY 密码]; create user bb identify by 123; 给用户授权 直接授权 GRANT 角色名称 TO 用户名称; 通过角色授权 GRANT 权限 ON 表名 TO 用户名; 查看用户权限 SHOW GRANTS FOR 用户名; 删除用户 DROP USER 用户名; 3.注意点 mysql创建角色后 默认是没有激活的 需要激活 SET global activate_all_roles_on_login=ON; mysql8开始才支持角色

    作者回复: 好的

    2022-02-12
  • Ironhide
    请教老师,某个特定角色是否被激活的状态如何查询呢?

    作者回复: 可以用CURRENT_ROLE()函数,查看当前会话中处于激活状态的角色

    2021-05-22
  • floating
    -- 创建财务角色 CREATE ROLE 'accountant’; -- 授予财务角色对商品信息表、盘点表有只读的权限 GRANT SELECT ON demo.goodsmaster TO 'accountant'; GRANT SELECT ON demo.invcount TO 'accountant’; -- 授予财务角色对应付账款表有增删改查的权限 GRANT SELECT,INSERT,DELETE,UPDATE ON demo.invcount TO 'accountant'; -- 创建lisi用户 CREATE USER 'lisi' IDENTIFIED BY 'mysql'; -- 授予lisi的财务角色 GRANT 'accountant' TO 'lisi’; -- 激活所有角色登录权限 SET global activate_all_roles_on_login=ON;

    作者回复: 请参考思考题答案

    2021-04-21
  • SevenMonths
    补充: 撤销角色某个权限: REVOKE 权限 ON 表名 FROM 角色名; 撤销某个用户角色: REVOKE 角色名 FROM 用户名; 修改密码相关后执行: FLUSH PRIVILEGES;­【刷新MySQL的系统权限相关表】 -- 创建角色 CREATE ROLE ’test_role‘; -- 删除角色 DROP ROLE 'test_role'; -- 给角色赋予权限: GRANT SELECT,UPDATE ON demo.test_table TO 'test_role'; -- 撤销角色某个权限 REVOKE INSERT ON demo.test_table FROM 'test_role'; -- 创建用户 CREATE USER 'test_user'; -- 删除用户 DROP USER 'test_user'; -- 给用户授权角色 GRANT 'test_role' TO 'test_user'; -- 撤销用户的角色 REVOKE 'test_role' FROM 'test_user';
    2021-09-09
    1
    7
  • Season Zhang—凯程
    SET global activate_all_roles_on_login=ON; 显示【SQL 錯誤 (1193):Unknown system variable 'activate_all_roles_on_login' */】
    2023-09-01归属地:广东
  • Ru
    可不可以理解角色就是为了快速给用户赋权?
    2023-06-10归属地:陕西
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部