一篇搞懂MySQL权限管理

MySQL版本:5.6.36-log
用例 IP 172.30.10.12;数据库 testdb;数据表 t_test;用户 test

赋予权限:

  • GRANT 是赋予权限的 关键字,后面接赋予的权限种类常见的有 ALL PRIVILEGESINSERTDELETEUPDATESELECTCREATEDROP 等。
  • ON 指将 哪个数据库 的权限赋予用户,格式为testdb.t_test* 为表通配符,*.* 代表所有库所有表,testdb.* 代表 testdb 数据库下所有表。
  • TO 指将权限赋予 哪个用户,格式为 test@'172.30.10.12'% 为IP通配符:test@'%'
    ps:@ 前面可以加'',也可以不加,后面必须加,test@'172.30.10.12' test@'localhost' 'test'@'%'
  • WITH GRANT OPTION 指定该用户能够对其他用户进行权限管理。

全部权限
GRANT ALL PRIVILEGES ON *.* TO test@'localhost';

指定数据库增删改查数据权限
GRANT INSERT, DELETE, UPDATE, SELECT ON testdb.* TO test@'localhost';

创建表和删除表的权限
GRANT CREATE, DROP ON testdb.* TO test@'localhost';

赋予权限同时指定该用户能够给其他用户进行权限管理。
GRANT ALL PRIVILEGES ON testdb.* TO user@'localhost' WITH GRANT OPTION;

解除权限:

  • REVOKE 是解除权限的 关键字,后面接赋予的权限种类,对应赋予权限的 GRANT。
  • ON 指将 哪个数据库 的权限移除。
  • FROM 指将权限从 哪个用户 移除,对应赋予权限的 TO。

如果你想移除 test 用户的所有权限,可以执行一下命令:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM test;

解除指定数据库权限
REVOKE ALL PRIVILEGES ON testdb.* from test@'localhost';

其他:

  • 如果使用了 IDENTIFIED BY PASSWORDIDENTIFIED BY,指定的密码就会变成这个用户的新连接密码,即使这个用户已经存在且设置了密码。
    MySQL 5.7.2 之后的版本 使用就不会修改密码,因为 GRANT 设计用户单一用途权限管理。
  • USAGE 权限的用户等于没权限,创建用户就会分配 USAGE 权限,只能给自己改密码。
  • 设置权限之后要使用 FLUSH PRIVILEGES
  • 已连接的用户需要重新连接,权限才能生效。
  • 如果权限管理出现意料之外的混乱,检查 user@'%' 的权限。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。