前言为了避免删库跑路的事情,权限管理和数据备份是必要 。
机器环境
- MySQL 8.0.21 x86_64 MySQL Community Serve
- centos 7
当然也可以将权限直接授予用户 。
用户创建用户
-- 用户名称是由 用户名和登录用户的 ip 一同组成的,% 代表任意 ip CREATE USER 'db_dev'@'localhost' IDENTIFIED BY 'Mysql@12345678';
修改用户密码-- 修改用户密码ALTER USER 'test'@'localhost' IDENTIFIED BY 'password';
锁定用户-- 锁定用户不能登录ALTER USER 'db_dev1'@'localhost' ACCOUNT LOCK;-- 解锁ALTER USER 'db_dev1'@'localhost' ACCOUNT UNLOCK;
权限用户的权限信息保存在 information_schema.USER_PRIVILEGES
。也可以在 mysql.user
看到授权信息 。为了避免已经建立的链接的权限无法刷新,需要搭建数据库的时候,权限就要设计好 。
有部分权限是可以动态修改的,但是有的权限,在一个会话中是不能修改的 。为了避免问题,需要数据库使用之前就要做好权限规划 。
权限说明grant 用法
权限说明 ALL所有的权限,除了
GRANT OPTION
and PROXY
.ALTER修改表结构,ALTER TABLE
CREATE创建数据库和表DROP删除数据库、表、视图GRANT OPTIONGRANT权限允许你把你自己拥有的那些权限授给其他的用户 。可以用于数据库、表和保存的程序 。DELETE删除表数据INDEXINDEX权限允许你创建或删除索引 。INSERT插入表数据SELECT查询表数据UPDATE更新表数据PROCESSshow processlist 命令显示在服务器内执行的线程的信息(即其它账户相关的客户端执行的语句) 。SHOW VIEW查看视图SHOW DATABASES查看数据库列表,没有授予这个权限,只能查看到 information_schema
LOCK TABLES锁表RELOADFLUSH 相关的操作CREATE TABLESPACE允许使用操作表空间和日志的语句,比如创建,删除,修改CREATE TEMPORARY TABLES创建临时表 授权-- 对从 localhost 登录的用户 db_dev 的数据库:ceshi 中所有表(*) 授予 SHOW DATABASES,SELECT,RELOAD 权限GRANT SHOW DATABASES,SELECT,RELOAD ON ceshi.* TO 'db_dev'@'localhost';-- 也可以针对某个表授权,`` 是为了处理关键字,当没有关键字可以 ceshi.test1 就可以GRANT SELECT ON ceshi.`test1` TO 'db_dev'@'localhost';-- 刷新权限信息,有的权限是可以动态加载的 。为了避免权限出题,每次都执行这个语句FLUSH PRIVILEGES;
回收权限-- ON 指定数据库.表 -- FROM 指定用户REVOKE SHOW DATABASES,SELECT ON *.* FROM 'db_dev'@'localhost';-- 刷新权限信息FLUSH PRIVILEGES;
角色使用数据库的人员可能有,开发,DBA,运营相关(只会查询数据),程序运行 。角色激活给用户赋予角色之后,角色默认不激活的 。用户可以在会话中激活用户赋予的角色 。
也可以设置参数,让所有角色都激活,这样用户登录成功,赋予的角色全选就可以使用了
-- 查看当前用户下使用了哪些角色SELECT CURRENT_ROLE();-- 登录之后激活定义的所有角色,给用户赋予哪些角色,就可以使用这些角色的权限SET global activate_all_roles_on_login=ON;-- 在会话中修改激活哪些角色SET ROLE ops;
创建及删除角色-- 开发(dev),db(db),运营(ops),程序运行(App_run)CREATE ROLE 'app_run', 'db', 'ops', 'dev';-- 删除角色DROP ROLE 'db', 'app_run';
给角色分配权限- 开发
drop 权限我建议不要给
-- crud,创建GRANT SELECT, INSERT, UPDATE, DELETE,CREATE,CREATE VIEW,ALTER,SHOW DATABASES,SHOW VIEW,ALTER,INDEX,PROCESS,RELOAD,LOCK TABLES ON *.* TO 'dev';
- db
-- WITH GRANT OPTION 是拥有给用户授权的权限GRANT ALL PRIVILEGES ON *.* TO 'db' WITH GRANT OPTION;
- 运营相关
-- 或者指定某个具体数据库,或者表GRANT SELECT,SHOW DATABASES,SHOW VIEW ON *.* TO 'ops';
- 程序运行相关
DELETE 语句不要怕,现在 mybatis plus 类似的组件,都带有安全删除的校验,全表删除或者全表更新必须带条件 。在一定程度上避免删除表中所有数据 。
推荐阅读
- MySQL 8 持久化系统变量
- web交换机管理怎么管理?两种方法,轻松掌握
- 为什么大部分互联网公司,使用的数据库都是MySQL?
- 程序员私活利器,免费开源的cms内容管理系统
- Mysql中你知道几种防止数据重复的方法?
- mysql数据库的数据表重命名方法
- Mysql重磅推出金融级分布式数据库MGR大揭秘
- ERP的权限管理的操作与设计
- 一文详解操作系统进程管理
- 物业管理服务沟通方法