MySQL 用户管理
相关数据库和表
- 元数据数据库:mysql
- 系统授权表:db,host,user,columns_priv,tables_priv,procs_priv,proxies_priv
用户帐号
'USERNAME'@'HOST'
HOST支持通配符
root@192.168.1.%
创建用户
CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];
用户重命名
RENAME USER old_user_name TO new_user_name;
删除用户
DROP USER 'USERNAME'@'HOST';
范例:删除默认的空用户
DROP USER ''@'localhost';
MYSQL怎么修改用户密码:
新版mysql中用户密码可以保存在mysql.user表的authentication_string字段中。
如果mysql.user表的authentication_string和password字段都保存密码,authentication_string优先生效。
方法1:将密码123456加密后存放在mysql.user表中
set password for root@'localhost'='123456';
方法2:通用改密码方法
ALTER USER root@'localhost' IDENTIFIED BY '123456';
MYSQL忘记root密码的破解方法:
在MYSQL服务端配置文件中添加以下选项
[mysqld]
skip-grant-tables
重启服务
systemctl restart mysqld
随便用一个不存在的用户登录数据库(不要用root)
mysql -uaaa
刷新权限
flush privileges;
修改root密码
ALTER USER root@'localhost' IDENTIFIED BY '12345678';
最后把刚才的配置文件注释掉
[mysqld]
#skip-grant-tables
重启服务,正常登录
systemctl restart mysqld
mysql -uroot -p12345678
授权GRANT
GRANT priv_type [(column_list)],... ON [object_type] priv_level TO 'user'@'host'
[IDENTIFIED BY 'password'] [WITH GRANT OPTION];
priv_type: ALL [PRIVILEGES]
object_type:TABLE | FUNCTION | PROCEDURE
priv_level: *(所有库) |*.* | db_name.* | db_name.tbl_name | tbl_name(当前库的表) | db_name.routine_name(指定库的函数,存储过程,触发器)
with_option: GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
范例:
GRANT ALL ON wordpress.* TO wordpress@'10.0.0.%';
注:创建用户和授权同时执行的方式在MySQL8.0取消了
取消权限REVOKE
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON
[object_type] priv_level FROM user [, user] ...
范例:
REVOKE DELETE ON *.* FROM 'testuser'@'10.0.0.%';
查看MYSQL用户的权限
SHOW GRANTS FOR 'user'@'host';
SHOW GRANTS FOR CURRENT_USER[()];
MYSQL通常会自动重读授权表,使之生效。对于不能及时重读授权表的,可以执行以下命令手动读取。
FLUSH PRIVILEGES;