参考文档:2021-06-25MySQL8.0创建用户和权限控制 - 简书
mysql登陆命令:
mysql -u用户名 -p密码;
若遇到复杂密码,包含特殊字符,则需要做转义(以下密码为:rootry?elyl!):
mysql -uroot -prootry\?elyl\!
重置密码命令(mysql8.0.25):
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
创建用户:
host:指定该用户在哪个主机上可以登陆,从本地登录填localhost,或者IP(192.168.98.1),任意主机登陆填通配符%
password:登陆密码,密码可以为空,如果为空则该用户可以不需要密码也可登陆
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
授权:
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名,如果授予整个数据库权限填databasename.*
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
GRANT privileges ON databasename.tablename TO 'username'@'host';
grant select on test.* to 'query'@'%';
取消授权:
mysql只有授权没有禁止,因此取消授权就是将原来授权过的权限和范围原样取消。
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
revoke select on test.* from 'query'@'%';
若授权的是test.*,取消授权时为test.t_emp,则无法取消。
若需要对某张表进行授权排除,则只能对除这张表外的所有表进行授权。此时可以通过查询拼接语句的方式,找出除这张表外其他表的授权语句,再进行批量执行:
select concat('grant select on lmehr.',table_name,' to \'query\'@\'%\';')
from information_schema.tables
where table_schema = 'lmehr'
and table_name !='t_table_a'
and table_name !='t_table_b'
and table_name !='t_table_c'
and table_name !='t_table_d'
and table_name !='t_table_e'
and table_name !='t_table_f'
and table_name !='t_table_g'
and table_name !='t_table_h'
查看所有授权:
SHOW GRANTS FOR 'USERNAME'@'HOST';
show grants for 'query'@'%';