开发者

mysql用户管理和权限设置方式

开发者 https://www.devze.com 2024-08-13 12:19 出处:网络 作者: 哦...
目录mysql用户管理和权限设置MYSQL到底都有哪些权限呢?MySQL权限经验原则MySQL权限实战1. 创建用户2. 授权3. 设置与更改用户密码4. 撤销用户权限5. 删除用户总结mysql用户管理和权限设置
目录
  • mysql用户管理和权限设置
    • MYSQL到底都有哪些权限呢?
  • MySQL权限经验原则
    • MySQL权限实战
      • 1. 创建用户
      • 2. 授权
      • 3. 设置与更改用户密码
      • 4. 撤销用户权限
      • 5. 删除用户
    • 总结

      mysql用户管理和权限设置

      MYSQL到底都有哪些权限呢?

      从官网复制一个表来看看:

      权限

      权限级别

      权限说明

      CREATE

      数据库、表或索引

      创建数据库、表或索引权限

      DROP

      数据库或表

      删除数据库或表权限

      GRANT OPTION

      数据库、表或保存的程序

      赋予权限选项

      REFERENCES

      数据库或表

      ALTER

      更改表,比如添加字段、索引等

      DELETE

      删除数据权限

      INDEX

      索引权限

      INSERT

      插入权限

      SELECT

      查询权限

      UPDATE

      更新权限

      CREATE VIEW

      视图

      创建视图权限

      SHOW VIEW

      视图

      查看视图权限

      ALTER ROUTINE

      存储过程

      更改存储过程权限

      CREATE ROUTINE

      存储过程

      创建存储过程权限

      EXECUTE

      存储过程

      执行存储过程权限

      FILE

      服务器主机上的文件访问

      文件访问权限

      CREATE TEMPORARY TABLES

      服务器管理

      创建临时表权限

      LOCK TABLES

      服务器管理

      锁表权限

      CREATE USER

      服务器管理

      创建用户权限

      PROCESS

      服务器管理

      查看进程权限

      RELOAD

      服务器管理

      执行flush-hosts, flush-logs, flush-privileges, phpflush-status, flush-tables, flush-threads, refresh, reload等命令的权限

      REPLICATION CLIENT

      服务器管理

      复制权限

      REPLICATION SLAVE

      服务器管理

      复制权限

      SHOW DATABASES

      服务器管理

      查看数据库权限

      SHUTDOWN

      服务器管理

      关闭数据库权限

      SUPER

      服务器管理

      执行kill线程权限

      MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等

      这个可以从官方文档中的一个表来说明:

      权限分布

      可能的设置的权限

      表权限

      'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

      列权限

      'Select', 'Insert', 'Update', 'References'

      过程权限

      'Execute', 'Alter Routine', 'Grant'

      MySQL权限经验原则

      权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

      • 1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
      • 2、创建用户编程客栈的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
      • 3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
      • 4、为每个用户设置满足密码复杂度的密码。
      • 5、定期清理不需要的用户。回收权限或者删除用户。

      MySQL权限实战

      1. 创建用户

      命令:

      CREATE USER 'usepythonrname'@'host' IDENTIFIED BY 'password';

      说明:

      • username:你将创建的用户名
      • host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
      • password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

      例子:

      CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
      CREATE USER 'pig'@'192.168.1.101' IDENDIFIED BY '123456';
      CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
      CREATE USER 'pig'@'%' IDENTIFIED BY '';
      CREATE USER 'pig'@'%';

      2. 授权

      命令:

      GRANT privileges ON databasename.tablename TO 'username'@'host'

      说明:

      • privileges:用户的操作权限,如SELECTINSERTUPDATE等,如果要授予所的权限则使用ALL
      • databasename:数据库名
      • tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*

      例子:

      GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
      GRANT ALL ON *.*GJmZPs TO 'pig'@'%';
      GRANT ALL ON maindataplus.* TO 'pig'@'%';

      需要注意的是:

      用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:

      GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

      3. 设置与更改用户密码

      命令:

      SET PASSWORD FOR 'user编程客栈name'@'host' = PASSWORD('newpassword');

      如果是当前登录用户用:

      SET PASSWORD = PASSWORD("newpassword");

      例子:

      SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");

      需要注意的是,从MySQL 5.7.6版本开始,MySQL不推荐使用此语法,会在将来的版本中将PASSWORD函数删除。

      作为代替的解决方案,在8.0版本中直接使用明文密码:

      SET PASSWORD FOR 'pig'@'%' = 'newpasswd2';

      4. 撤销用户权限

      命令:

      REVOKE privilege ON databasename.tablename FROM 'username'@'host';

      说明:

      privilege, databasename, tablename:同授权部分

      例子:

      REVOKE SELECT ON *.* FROM 'pig'@'%';

      注意:

      假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):

      GRANT SELECT ON test.user TO 'pig'@'%'

      则在使用

      REVOKE SELECT ON *.* FROM 'pig'@'%';

      命令并不能撤销该用户对test数据库中user表的SELECT 操作。

      相反,如果授权使用的是

      GRANT SELECT ON *.* TO 'pig'@'%';

      REVOKE SELECT ON test.user FROM 'pig'@'%';

      命令也不能撤销该用户对test数据库中user表的Select权限。

      具体信息可以用命令

      SHOW GRANTS FOR 'pig'@'%'; 

      查看。

      5. 删除用户

      命令:

      DROP USER 'username'@'host';

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号