MySQL用户操作

查看用户

  1. mysql> use mysql ;
  2. mysql8 select host,user, authentication_string from user ;
  3. mysql> select host,user,password from user ;

创建用户

  1. 方法一: CREATE USER语句创建
  2. CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码";
  3. 方法二: INSERT语句创建
  4. INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject)
  5. VALUES(‘用户名’,’IP地址’,password(‘密码’),’’,’’,’’);
  6. FLUSH PRIVILEGES;
  7. 方法三: GRANT语句创建
  8. GRANT SELECT ON *.* TO 用户名@’IP地址’ IDENTIFIED BY ‘密码’;
  9. FLUSH PRIVILEGES;

删除用户

mysql5之后drop 命令可以删除用户的同时删除用户的相关权限

  1. 方法一:DROP USER语句删除
  2. DROP USER "用户名"@"IP地址";
  3. 方法二:DELETE语句删除
  4. DELETE FROM mysql.user WHERE user=’用户名’ AND host=’IP地址’;
  5. FLUSH PRIVILEGES;

修改密码

root用户修改自己密码:

  1. 方法一:
  2. mysqladmin -uroot -p123 password ‘new_password’ //123为旧密码

  3. 方法二:
  4. UPDATE mysql.user SET password=password(‘new_password’)
  5. WHERE user=’root’ AND host=’localhost’;
  6. FLUSH PRIVILEGES;
  7. 方法三:
  8. SET PASSWORD=password(‘new_password’);
  9. FLUSH PRIVILEGES;

root修改其他用户密码:

  1. 方法一:
  2. SET PASSWORD FOR 用户名@’IP地址’=password(‘new_password’);
  3. FLUSH PRIVILEGES;
  4. 方法二:
  5. UPDATE mysql.user SET password=password(‘new_password’)
  6. WHERE user=’用户名’ AND host=’IP地址’;
  7. FLUSH PRIVILEGES;
  8. 方法三:
  9. GRANT SELECT ON . TO user3@’localhost’ IDENTIFIED BY ‘yuan’;
  10. FLUSH PRIVILEGES;

普通用户修改自己密码:

  1. SET password=password(‘new_password’);

丢失root用户密码:

  1. vim /etc/my.cnf

  2. skip-grant-tables
  3. service mysqld restart

  4. mysql -uroot

  5. mysql> UPDATE mysql.user SET password=password(‘new_password’)
  6. WHERE user=’root’ AND host=’localhost’;
  7. mysql> FLUSH PRIVILEGES;

修改用户名:

  1. rename user ‘用户名’@’IP地址’ to ‘新用户名’@’IP地址’;

注解 flush privileges:

  1. /*
  2. flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
  3. MySQL用户数据和权限有修改后,搜索希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令
  4. */

MySQL权限管理

查看权限

  1. mysql> show grants for '用户'@'IP地址';

授予权限

  1. --语法格式:
  2. grant 权限列表 on 库名.表名 to 用户名@'客户端主机' [identified by '密码' with参数];

授予查询、插入、更新、删除 数据库中所有表数据的权限

  1. -- 给该用户授予对数据库db1下表tb1所有的操作权限 其中,关键字 privileges 可以省略。
  2. mysql> grant all privileges on db1.tb1 TO '用户名'@'IP'
  3. -- 给该用户授予对数据库db1下所有表进行查操作的权限
  4. mysql> grant select on db1.* TO '用户名'@'IP'
  5. -- 给该用户授予对所有数据库下所有表进行查和增的操作
  6. mysql> grant select,insert on *.* TO '用户名'@'IP'
  7. -- 用户只能在该IP段下才能(通配符%表示任意)对所有数据库下所有表进行查操作
  8. mysql> grant select on *.* TO '用户名'@'192.168.1.%'
  9. -- 用户能用户可以在任意IP下(通配符%表示任意)对所有数据库下所有表进行查操作
  10. mysql> grant select on *.* TO '用户名'@'%'
  11. mysql> grant selectupdatedelete insert on dmc_db.* to zx_root;
  12. mysql> flush privileges ;

授予创建表、索引、视图、存储过程、函数。。。等权限

  1. -- 创建、修改、删除 MySQL 数据表结构权限。
  2. grant create on testdb.* to developer@192.168.0.%’;
  3. grant alter on testdb.* to developer@192.168.0.%’;
  4. grant drop on testdb.* to developer@192.168.0.%’;
  5. -- 操作 MySQL 外键权限。
  6. grant references on testdb.* to developer@192.168.0.%’;
  7. -- 操作 MySQL 临时表权限。
  8. grant create temporary tables on testdb.* to developer@192.168.0.%’;
  9. -- 操作 MySQL 索引权限。
  10. grant index on testdb.* to developer@192.168.0.%’;
  11. -- 操作 MySQL 视图、查看视图源代码 权限。
  12. grant create view on testdb.* to developer@192.168.0.%’;
  13. grant show view on testdb.* to developer@192.168.0.%’;
  14. -- 操作 MySQL 存储过程、函数 权限。
  15. mysql> grant create, alter routine on testdb.* to developer@'192.168.0.%' ;
  16. mysql> grant execute on testdb.* to developer@'192.168.0.%';
  17. flush privileges ;

授权选项

  1. GRANT OPTION -- 授权选项
  2. MAX_QUERIES_PER_HOUR -- 定义每小时允许执行的查询数
  3. MAX_UPDATES_PER_HOUR -- 定义每小时允许执行的更新数
  4. MAX_CONNECTIONS_PER_HOUR -- 定义每小时可以建立的连接数
  5. MAX_USER_CONNECTIONS -- 定义单个用户同时可以建立的连接数

示例: 限制用户每小时的查询数量

  1. mysql> grant select on *.* to '用户名'@'IP地址' identified by '123456' with max_queries_per_hour 5;

回收权限

  1. --语法:
  2. REVOKE 权限列表 ON 库名.表名 FROM 用户名@‘客户端主机’

示例:

  1. REVOKE DELETE ON *.* FROM 用户名@'%'; -- 回收部分权限
  2. REVOKE ALL PRIVILEGES FROM 用户名@'%'; -- 回收所有权限
  3. flush privileges ;