MYSQL 8用户及角色管理

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';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章