Mysql权限管理

前言

公司的mysql权限管理还算是比较的严格,每个数据库只有与之对应的用户有读写权限,而我在本地启动项目的时候,每次都要修改配置文件中的数据库连接,用户名,密码.

太麻烦了.

因此我将线上mysql的host映射到127.0.0.1,给本地的mysql添加所有的用户,这样我就可以不用修改配置文件啦!(建议大家也进行权限管理,每个数据库单独账号读写).

但是我没有,我直接执行了

1
grant all privileges on *.* to username@'%' identified by 'password';

将所有数据库的所有表的所有权限赋给了某用户.

修改完之后决定学习一下mysql的权限管理,记录一下方便后续查找.

为什么要进行权限管理

当然是为了安全,防止删库跑路这样的事情,或者程序员的手抖.

权限管理时应该遵循以下原则:

  1. 只授予能满足需要的最小权限.比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。

  2. 创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

mysql都有那些权限

这里引用官网上的一个表格来说明:

权限分布 具体权限
表权限 ‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’
列权限 ‘Select’, ‘Insert’, ‘Update’, ‘References’
过程权限 ‘Execute’, ‘Alter Routine’, ‘Grant’

如何进行权限管理

据我所知有两种方式:

  1. 使用grant命令.
  2. 操作mysql数据库中的user表.

grant命令

grant命令就是前言中我使用的那种方式.

1. 修改权限

前言中该语句的详细解释如下:

1
grant all privileges on *.* to username@'%' identified by 'password';
  1. ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。
  2. ON 用来指定权限针对哪些库和表。
  3. *.* 中前面的号用来指定数据库名,后面的号用来指定表名。
  4. TO 表示将权限赋予某个用户。
  5. username@’%’ 表示username用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
  6. IDENTIFIED BY 指定用户的登录密码。
  7. WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。

2. 查看权限

2.1 查看当前用户的权限

1
show grants;

2.2 查看某一个用户的权限

1
show grants for 'root'@'localhost';

3.回收权限

1
revoke select on *.* from test@'%';

4.修改用户密码

1
SET PASSWORD FOR 'test'@'%' = PASSWORD('123456');

5.修改后刷新权限

1
flush privileges;

修改mysql中的user表

在命令行连接上mysql之后,显示所有的数据库,连接mysql数据库,查看其中的user表,然后查看user表的字段类型.

可以看到其中的字段代表的意义以及可取值.

对此数据表的操作将可以直接影响到用户的权限,具体操作方式与操作其他数据表并无区别,只需查看一下字段对应的意义即可,这里不再赘述.

数据库操作还是小心为妙啊,能用select权限就别用drop权限,否则不知道什么时候会手抖.

完。





ChangeLog

2018-11-22 完

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客——>呼延十