前言
公司的mysql权限管理还算是比较的严格,每个数据库只有与之对应的用户有读写权限,而我在本地启动项目的时候,每次都要修改配置文件中的数据库连接,用户名,密码.
太麻烦了.
因此我将线上mysql的host映射到127.0.0.1,给本地的mysql添加所有的用户,这样我就可以不用修改配置文件啦!(建议大家也进行权限管理,每个数据库单独账号读写).
但是我没有,我直接执行了
grant all privileges on *.* to username@'%' identified by 'password';
将所有数据库的所有表的所有权限赋给了某用户.
修改完之后决定学习一下mysql的权限管理,记录一下方便后续查找.
为什么要进行权限管理
当然是为了安全,防止删库跑路
这样的事情,或者程序员的手抖
.
权限管理时应该遵循以下原则:
-
只授予能满足需要的最小权限.比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
-
创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
mysql都有那些权限
这里引用官网上的一个表格来说明:
权限分布 | 具体权限 |
---|---|
表权限 | ‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’ |
列权限 | ‘Select’, ‘Insert’, ‘Update’, ‘References’ |
过程权限 | ‘Execute’, ‘Alter Routine’, ‘Grant’ |
如何进行权限管理
据我所知有两种方式:
- 使用grant命令.
- 操作mysql数据库中的user表.
grant命令
grant命令就是前言中我使用的那种方式.
1. 修改权限
前言中该语句的详细解释如下:
grant all privileges on *.* to username@'%' identified by 'password';
- ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。
- ON 用来指定权限针对哪些库和表。
- *.* 中前面的号用来指定数据库名,后面的号用来指定表名。
- TO 表示将权限赋予某个用户。
- username@’%’ 表示username用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
- IDENTIFIED BY 指定用户的登录密码。
- WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。
2. 查看权限
2.1 查看当前用户的权限
show grants;
2.2 查看某一个用户的权限
show grants for 'root'@'localhost';
3.回收权限
revoke select on *.* from test@'%';
4.修改用户密码
SET PASSWORD FOR 'test'@'%' = PASSWORD('123456');
5.修改后刷新权限
flush privileges;
修改mysql中的user表
在命令行连接上mysql之后,显示所有的数据库,连接mysql数据库,查看其中的user表,然后查看user表的字段类型.
可以看到其中的字段代表的意义以及可取值.
对此数据表的操作将可以直接影响到用户的权限,具体操作方式与操作其他数据表并无区别,只需查看一下字段对应的意义即可,这里不再赘述.
数据库操作还是小心为妙啊,能用select权限就别用drop权限,否则不知道什么时候会手抖.
完。
ChangeLog
2018-11-22 完以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客------>呼延十