MYSQL 8用户及角色管理

mac2026-08-26  10

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';
最新回复(0)