DCL

(Data Control Language):数据控制语言,用来定义访问权限和安全级别。

USER

SHOW USERS

所需权限

查看所有的用户,需要admin权限。

语法图

ShowUserStmt
SHOWUSERS

展示用户

show users;

CREATE USER

CREATE USER 语句创建库用户,使你可以控制数据库的表的权限。

事项说明

角色名:

  • 不区分大小写

  • 必须以字母或下划线开头

  • 必须仅包含字母,数字或下划线

  • 必须介于1到63个字符之间

  • 创建用户后,必须授予他们对数据库和表的权限

  • 在secure集群上,你必须为用户创建客户端证书,并且用户必须验证其对集群的访问权限

所需权限

要创建其他用户,该用户必须是管理员角色或具有创建者角色。

语法图

CreateUserStmt
CREATEUSERIFNOTEXISTSnameWITHPASSWORDpassword

参数介绍

参数简介
if not exists仅当数据库中不存在同名时,才创建新用户
name要创建的用户名

创建用户(不含密码,不判断用户是否存在)

create user beagledata;

创建用户(包含密码,不判断用户是否存在)

create user beagledata with password 'beagledatapwd';

创建用户(能够设置密码的有效期限)

create user beagledata with login password 'beagledatapwd' valid until '2023-10-24';

创建用户(包含密码,并判断用户是否存在)

create user if not exists beagledata with password 'beagledatapwd';

创建用户(能够创建其他用户并且管理身份认证)

create user do_create_user with createrole createlogin;

创建用户(能够创建数据库)

create user do_create_user with createdb;

创建用户(能够取消、暂停、恢复非管理员的作业)

create user do_control_job with controljob;

DROP USER

所需权限

非管理员用户无法删除管理员用户。要删除非管理员用户,该用户必须是管理员角色或具有创建者角色。

用户被删除前,必须删除该用户的所有权限。

语法图

DropUserStmt
DROPUSERIFEXISTSuser_name,

参数介绍

参数简介
IF EXISTS如果存在则删除数据库;如果不存在,则不返回错误
user_name数据库用户名

展示针对单个表的权限

show grants on hubble.orders for beagledata;
+--------+------------+------------+
| Table  |     User   | Privileges |
+--------+------------+------------+
| orders | beagledata | CREATE     |
| orders | beagledata | INSERT     |
| orders | beagledata | UPDATE     |
+--------+------------+------------+
(3 rows)

展示针对用户的所有权限:

show grants for beagledata;

回收表的权限(被收回的权限需是显式授权给用户的权限):

revoke create,insert,update on hubble.orders from beagledata;

删除用户(当用户显式授权未全部收回时,无法删除用户):

drop user beagledata;

ALTER USER

ALTER USER语句可用于添加、更改或删除用户的密码以及更改用户的角色选项

所需权限

要更改其他用户,该用户必须是管理员角色或具有创建者角色。

语法图

AlterUserStmt
ALTERUSERIFEXISTSuser_nameWITHPASSWORDpassword

参数介绍

参数简介
password数据库的密码
user_name数据库用户名

修改用户只需要将create关键字换成alter

例如:修改密码

alter user beagledata with password 'password123';

ROLE

SHOW ROLES语句列出了所有数据库的角色

SHOW ROLES

查看所有数据库上的角色,需要admin权限。

语法图

ShowRoleStmt
SHOWROLES

展示角色语句

show roles;

CREATE ROLE

CREATE ROLE语句创建SQL角色

所需权限

创建一个角色,除非角色是管理员角色或者角色必须具有创建者权限。

语法图

CreateRoleStmt
CREATEROLEIfNotExistsRoleSpec,
IfNotExists
IFNOTEXISTS
RoleSpec
name

参数介绍

参数简介
name要创建的角色的名称
if not exists仅当数据库中不存在同名时,才创建新角色

创建角色示例

create role uat;

创建角色(包含密码,不判断用户是否存在)

create role beagledata with password 'beagledatapwd';

创建角色(能够设置密码的有效期限)

create role beagledata with login password 'beagledatapwd' valid until '2023-10-24';

创建角色(能够创建其他用户并且管理身份认证)

create role do_create_user with createrole createlogin;

创建角色(能够创建数据库)

create role do_create_user with createdb;

创建角色(能够取消、暂停、恢复非管理员的作业)

create role do_control_job with controljob;

DROP ROLE

DROP ROLE语句删除一个或多个角色

事项说明

  • admin角色不能被删除,并且root必须始终是 的成员admin
  • 如果角色具有特权,则不能删除它。用于REVOKE删除权限。
  • 拥有对象(如数据库、表、模式和类型)的角色在所有权转移给另一个角色之前不能被删除。

所需权限

若要删除非管理员角色,该角色必须是管理员角色或具有创建者角色。

语法图

DropRoleStmt
DROPROLEIFEXISTSRolenameList
RolenameList
Rolename,

参数介绍

参数简介
Rolename角色的名称
IF EXISTS如果存在则删除角色

展示用的角色

show grants on table_name for uat;
+------------+--------+-----------+---------+------------+
|  Database  | Schema |   Table   |  User   | Privileges |
+------------+--------+-----------+---------+------------+
| test       | public | table_name|  uat    | INSERT     |
+------------+--------+-----------+---------+------------+

收回用户的权限才可以删除

revoke insert on  table_name from uat;

删除示例:

drop role uat;

PRIVILEGE

显示权限授予

使用以下语法显示授予用户对数据库对象的权限,DATABASE省略时,将列出当前数据库中的模式、表和类型

show grants [ON [DATABASE | SCHEMA | TABLE | TYPE] <targets...>] [FOR <users...>]

显示角色授权

使用以下语法显示集群中用户的角色授予

show grants  on role [<roles...>] [FOR <users...>]

SHOW GRANTS

列出所有数据库对象的权限信息。

show grants ;

列出角色是admin的用户。

show grants on role admin;

列出admin角色的权限信息。

show grants for admin;

列出某个数据库的权限信息。

show grants on database my_hubble_database;

列出beagledata用户在数据库my_hubble_database的权限信息。

show grants on database my_hubble_database for beagledata;

列出某张表的权限信息。

show grants on table my_hubble_table;

GRANT

用于添加一个角色或者角色中的一个用户。

所需权限

授予角色成员资格的用户必须是角色管理员或者是admin角色的成员

  • 用户 和 角色 可以作为角色成员 。
  • root 用户会自动作为 admin 角色 且对所有数据库拥有 ALL 权限。
  • 角色成员会自动继承其角色的所有权限。

GRANT用于控制每一个角色或者用户和指定数据库或数据表上拥有的sql权限,对于指定语句所需要的权限,请查看各自相关sql语句的文档。

支持的权限如下:

权限级别
ALLDatabase,Table
CREATEDatabase,Table
DROPDatabase,Table
GRANTDatabase,Table
SELECTTable
INSERTTable
DELETETable
UPDATETable

语法图

GrantStmt
GRANTPrivElemListONObjectTypeObjectnameTOUserSpecList
PrivElemList
PrivElem,
PrivElem
PrivType(ColumnNameList)
PrivType
ALLPRIVILEGESALTERROUTINECREATEUSERTEMPORARYTABLESVIEWROLEROUTINEDELETEDROPROLEEXECUTEINDEXINSERTSELECTSUPERSHOWDATABASESVIEWUPDATE
ObjectType
TABLEDATABASE
UserSpecList
UserSpec,

参数介绍

参数简介
PrivType一般指的是具体的权限类型
ObjectType对象类型,一般是TABLEDATABASE
Objectname具体的数据库名或者表名
UserSpec具体角色或者权限名称

给用户授予数据库的权限

grant create on database hubbletest to beagledata;
show  grants on database hubbletest;

给角色授予数据库的权限

grant create on database hubbletest to uat;
show  grants for uat;

给用户授予某张表的权限

grant delete  on table hubbletest.orders to beagledata;
show  grants  on table hubbletest.orders;

授予用户(数据库test下)所有表insertupdate权限

grant insert,update  on table test.* to do_create_user;

创建用户后根据实际需要赋予admin权限,一般情况下,同一应用系统只有一个用户能拥有admin权限

grant admin to beagledata with admin option;

REVOKE

REVOKE语句撤销用户和或角色的权限。

所需权限

  • 要撤消权限,撤消权限的用户必须GRANT对目标数据库、模式、表或用户定义类型具有权限。除了GRANT特权之外,撤销特权的用户还必须对目标对象具有被撤销的特权。例如,一个用户将SELECT一个表的权限撤销给另一个用户,就必须拥有该表的GRANTSELECT权限。

  • 要撤销角色成员资格,撤销角色成员资格的用户必须是角色管理员(即,带有 的成员WITH ADMIN OPTION)或admin角色成员。要删除admin角色的成员资格,用户必须拥有WITH ADMIN OPTIONadmin角色。

支持的权限如下:

权限级别
ALLDatabase,Table
CREATEDatabase,Table
DROPDatabase,Table
GRANTDatabase,Table
SELECTTable
INSERTTable
DELETETable
UPDATETable
USAGESchema, Type
ZONECONFIGDatabase, Table

语法图

RevokeStmt
GRANTPrivElemListONObjectTypeObjectnameFROMUserSpecList
PrivElemList
PrivElem,
PrivElem
PrivType(ColumnNameList)
PrivType
ALLPRIVILEGESALTERROUTINECREATEUSERTEMPORARYTABLESVIEWROLEROUTINEDELETEDROPROLEEXECUTEINDEXINSERTSELECTSUPERSHOWDATABASESVIEWUPDATE
ObjectType
TABLEDATABASE
UserSpecList
UserSpec,

参数介绍

参数简介
PrivType一般指的是具体的权限类型
ObjectType对象类型,一般是TABLEDATABASE
Objectname具体的数据库名或者表名
UserSpec具体角色或者权限名称

回收用户的数据库的权限

revoke create on database hubbletest from beagledata;
show grants on database hubbletest;

回收给角色的数据库的权限

revoke create on database hubbletest from uat;
show grants on database hubbletest for uat;

回收给用户授予的表的权限

revoke delete on table hubbletest.orders from beagledata;
show grants on table hubbletest.orders;