MySQL用户操作
查看用户
mysql> use mysql ;
mysql8 select host,user, authentication_string from user ;
mysql> select host,user,password from user ;
创建用户
方法一: CREATE USER语句创建
CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码";
方法二: INSERT语句创建
INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject)
VALUES(‘用户名’,’IP地址’,password(‘密码’),’’,’’,’’);
FLUSH PRIVILEGES;
方法三: GRANT语句创建
GRANT SELECT ON *.* TO 用户名@’IP地址’ IDENTIFIED BY ‘密码’;
FLUSH PRIVILEGES;
删除用户
mysql5之后drop 命令可以删除用户的同时删除用户的相关权限
方法一:DROP USER语句删除
DROP USER "用户名"@"IP地址";
方法二:DELETE语句删除
DELETE FROM mysql.user WHERE user=’用户名’ AND host=’IP地址’;
FLUSH PRIVILEGES;
修改密码
root用户修改自己密码:
- 方法一:
mysqladmin -uroot -p123 password ‘new_password’ //123为旧密码
- 方法二:
- UPDATE mysql.user SET password=password(‘new_password’)
- WHERE user=’root’ AND host=’localhost’;
- FLUSH PRIVILEGES;
- 方法三:
- SET PASSWORD=password(‘new_password’);
- FLUSH PRIVILEGES;
root修改其他用户密码:
- 方法一:
- SET PASSWORD FOR 用户名@’IP地址’=password(‘new_password’);
- FLUSH PRIVILEGES;
- 方法二:
- UPDATE mysql.user SET password=password(‘new_password’)
- WHERE user=’用户名’ AND host=’IP地址’;
- FLUSH PRIVILEGES;
- 方法三:
- GRANT SELECT ON . TO user3@’localhost’ IDENTIFIED BY ‘yuan’;
- FLUSH PRIVILEGES;
普通用户修改自己密码:
- SET password=password(‘new_password’);
丢失root用户密码:
vim /etc/my.cnf
- skip-grant-tables
service mysqld restart
mysql -uroot
- mysql> UPDATE mysql.user SET password=password(‘new_password’)
- WHERE user=’root’ AND host=’localhost’;
- mysql> FLUSH PRIVILEGES;
修改用户名:
- rename user ‘用户名’@’IP地址’ to ‘新用户名’@’IP地址’;
注解 flush privileges:
/*
flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
MySQL用户数据和权限有修改后,搜索希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令
*/
MySQL权限管理
查看权限
mysql> show grants for '用户'@'IP地址';
授予权限
--语法格式:
grant 权限列表 on 库名.表名 to 用户名@'客户端主机' [identified by '密码' with参数];
授予查询、插入、更新、删除 数据库中所有表数据的权限
-- 给该用户授予对数据库db1下表tb1所有的操作权限 其中,关键字 “privileges” 可以省略。
mysql> grant all privileges on db1.tb1 TO '用户名'@'IP'
-- 给该用户授予对数据库db1下所有表进行查操作的权限
mysql> grant select on db1.* TO '用户名'@'IP'
-- 给该用户授予对所有数据库下所有表进行查和增的操作
mysql> grant select,insert on *.* TO '用户名'@'IP'
-- 用户只能在该IP段下才能(通配符%表示任意)对所有数据库下所有表进行查操作
mysql> grant select on *.* TO '用户名'@'192.168.1.%'
-- 用户能用户可以在任意IP下(通配符%表示任意)对所有数据库下所有表进行查操作
mysql> grant select on *.* TO '用户名'@'%'
mysql> grant select,update,delete ,insert on dmc_db.* to zx_root;
mysql> flush privileges ;
授予创建表、索引、视图、存储过程、函数。。。等权限
-- 创建、修改、删除 MySQL 数据表结构权限。
grant create on testdb.* to developer@’192.168.0.%’;
grant alter on testdb.* to developer@’192.168.0.%’;
grant drop on testdb.* to developer@’192.168.0.%’;
-- 操作 MySQL 外键权限。
grant references on testdb.* to developer@’192.168.0.%’;
-- 操作 MySQL 临时表权限。
grant create temporary tables on testdb.* to developer@’192.168.0.%’;
-- 操作 MySQL 索引权限。
grant index on testdb.* to developer@’192.168.0.%’;
-- 操作 MySQL 视图、查看视图源代码 权限。
grant create view on testdb.* to developer@’192.168.0.%’;
grant show view on testdb.* to developer@’192.168.0.%’;
-- 操作 MySQL 存储过程、函数 权限。
mysql> grant create, alter routine on testdb.* to developer@'192.168.0.%' ;
mysql> grant execute on testdb.* to developer@'192.168.0.%';
flush privileges ;
授权选项
GRANT OPTION: -- 授权选项
MAX_QUERIES_PER_HOUR: -- 定义每小时允许执行的查询数
MAX_UPDATES_PER_HOUR: -- 定义每小时允许执行的更新数
MAX_CONNECTIONS_PER_HOUR: -- 定义每小时可以建立的连接数
MAX_USER_CONNECTIONS: -- 定义单个用户同时可以建立的连接数
示例: 限制用户每小时的查询数量
mysql> grant select on *.* to '用户名'@'IP地址' identified by '123456' with max_queries_per_hour 5;
回收权限
--语法:
REVOKE 权限列表 ON 库名.表名 FROM 用户名@‘客户端主机’
示例:
REVOKE DELETE ON *.* FROM 用户名@'%'; -- 回收部分权限
REVOKE ALL PRIVILEGES FROM 用户名@'%'; -- 回收所有权限
flush privileges ;