mysql创建角色并授权给用户
CREATE DATABASE testdb;
创建角色
-- 创建角色
CREATE ROLE 'admin';
-- 语法
CREATE ROLE [IF NOT EXISTS] role [, role ] ...
角色授权
-- 角色授权
GRANT ALL ON testdb.* TO 'admin' WITH GRANT OPTION;
CREATE ROLE 'test';
GRANT SELECT,INSERT,DELETE,UPDATE ON testdb.* TO 'test';
-- 语法
GRANT role [, role] ... TO user_or_role [, user_or_role] ...[WITH ADMIN OPTION]
角色授权给用户
创建用户
CREATE USER 'admin'@'%' IDENTIFIED BY '1qaz@wsx';
角色授权给用户
设置用户默认角色的语法
-- 设置默认角色
SET DEFAULT ROLE 'admin' TO 'admin'@'%';
-- 语法
SET DEFAULT ROLE {NONE | ALL | role [, role ] ...} TO user [, user ] ...
服务器应视为必需的角色。实际上,这些 角色会自动授予每个用户,尽管 设置mandatory_roles 实际上不会更改任何用户帐户和授予的角色 在系统表中不可见。
mysql8开启角色自动激活
#设置开启
set global activate_all_roles_on_login=ON;
-- 查看是否开启
show variables like 'activate_all_roles_on_login';
当这个配置开启,服务器将在账号登录时,自动激活账号被授予所有角色。并且,优先于SET DEFAULT ROLE
设置的默认值。
如果禁用activate_all_roles_on_login
,服务器只会激活默认角色 。
更换会话的角色
SET ROLE DEFAULT; --激活默认角色
SET ROLE 'role1', 'role2';
SET ROLE ALL; -- 激活所有角色
SET ROLE ALL EXCEPT 'role1', 'role2';
-- 语法
SET ROLE { DEFAULT | NONE| ALL | ALL EXCEPT role [, role ] ...| role [, role ] ...}
设置服务器默认角色(不重要)
SET PERSIST mandatory_roles = '`role1`@`%`,`role2`,role3,role4@localhost';
服务器视为必需的角色。这些 角色会自动授予每个用户,设置mandatory_roles
实际上不会更改任何用户帐户和授予的角色,在系统表中也不可见。
撤销授权
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost';
REVOKE SELECT ON world.* FROM 'role3';
-- 语法
REVOKE [IF EXISTS] PROXY ON user_or_role FROM user_or_role [, user_or_role] ...
[IGNORE UNKNOWN USER]
其他相关内容
-
刷新授权
flush hosts; -- 当修改授权后,使用这个命令来刷新授权。 FLUSH PRIVILEGES ;
-
查看当前角色
SELECT CURRENT_ROLE();
-
查看授权
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER(); SHOW GRANTS FOR 'username'@'%' ; --查看某个用户授权
role的值有:
-
ALL PRIVILEGES
: 所有权限 -
CREATE
: 创建数据库和表的权限。 -
DROP
: 删除数据库和表的权限。 -
ALTER
: 修改表结构的权限。 -
INSERT
: 向表中插入数据的权限。 -
SELECT
: 查询表中数据的权限。 -
UPDATE
: 修改表中数据的权限。 -
DELETE
: 删除表中数据的权限。