Mysql 8创建用户的操作已经不支持grant的同时创建用户的方式,需先创建用户再进行授权,下面这种操作将会报错
mysql> grant all on *.* to 'test'@'%' identified by '123456';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456'' at line 1
Mysql 8用户管理
-- 查看帮助
help create user;
-- 创建用户,仅限本地访问
create user 'username'@'localhost' identified by 'password';
-- 创建用户,所有外网都可以访问
create user 'username'@'%' identified by 'password';
-- 以mysql_native_password加密方式创建用户
CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
-- 创建带过期时间的用户
CREATE USER `test`@`%` IDENTIFIED BY 'test' PASSWORD EXPIRE INTERVAL 90 DAY;
-- 创建一个带账户锁的用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password' ACCOUNT LOCK;
-- 刷新权限
flush privileges;
-- 修改密码
Alter user 'test'@'%' identified by '123456';
-- 修改密码为永不过期
ALTER USER 'test'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
-- 修改密码并指定加密规则为mysql_native_password
ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 刷新权限
flush privileges;
-- 锁定用户
ALTER USER 'test'@'%' ACCOUNT LOCK;
-- 用户解锁
ALTER USER 'test'@'%' ACCOUNT UNLOCK;
-- 删除用户
DROP USER 'username'@'host';
Mysql 8授权(两个
*
的含义,第一个*
表示数据库,第二个*
表示数据库的表)
-- 查看授权
show grants;
-- 错误的写法
GRANT ALL PRIVILEGES ON *.* 'test'@'%' identified by ‘123456';
-- 授权(所有库所有权限)
grant all privileges on *.* to 'test'@'%';
-- 授权(某个库所有权限)
grant all privileges on `test`.* to 'test'@'%';
-- 单独授予某种权限
GRANT SELECT ON oilsystem.input TO 'test'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 撤销权限
REVOKE all privileges ON databasename.tablename FROM 'username'@'host';
MYSQL权限
MySQL8.0用户密码管理
-- 密码过期时间管理
-- 要全局建立自动密码到期策略,请使用default_password_lifetime系统变量。其默认值为0,禁用自动密码过期。
-- 如果值default_password_lifetime正整数N,则表示允许的密码生存期,以便密码必须每天更改N。在my.cnf文件中加入以下配置
[mysqld]
default_password_lifetime=180
-- 使用默认密码策略
CREATE USER 'test'@'%' PASSWORD EXPIRE DEFAULT;
-- 禁止重复使用最近6个密码或密码超过365天的任何密码,在my.cnf文件中加入以下配置
[mysqld]
password_history=6
password_reuse_interval=365
MySQL8.0角色管理
-- 创建角色(例子:创建3个角色)
CREATE ROLE 'test_all', 'test_read', 'test_write';
-- 为角色分配权限(某个库)
GRANT ALL ON `testdb`.* TO 'test_all';
GRANT SELECT ON `testdb`.* TO 'test_read';
GRANT INSERT, UPDATE, DELETE ON `testdb`.* TO 'test_write';
-- 为角色分配权限(所有库)
GRANT ALL ON *.* TO 'test_all';
GRANT SELECT ON *.* TO 'test_read';
GRANT INSERT, UPDATE, DELETE ON *.* TO 'test_write';
-- 为用户分配角色
GRANT 'test_all' TO 'test'@'%';
GRANT 'test_read' TO 'read_user1'@'%', 'read_user2'@'%';
GRANT 'test_write', 'app_write' TO 'rw_user1'@'%';
-- 查看用户权限
SHOW GRANTS FOR 'test'@'%'\G;
-- 要显示角色权限,添加一个 USING来显示
SHOW GRANTS FOR 'read_user1'@'localhost' USING 'test_write';
-- 撤消角色或角色权限
REVOKE role FROM user;
-- REVOKE可以用于角色修改角色权限。这不仅影响角色本身权限,还影响任何授予该角色的用户权限。假设想临时让所有用户只读,使用REVOKE从该app_write角色中撤消修改权限
REVOKE INSERT, UPDATE, DELETE ON `testdb`.* FROM 'test_write';
-- 删除角色
DROP ROLE 'test_read', 'test_write';