(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
所需权限
查看所有的用户,需要admin
权限。
语法图
- ShowUserStmt
展示用户
show users;
CREATE USER
语句创建库用户,使你可以控制数据库的表的权限。
事项说明
角色名:
不区分大小写
必须以字母或下划线开头
必须仅包含字母,数字或下划线
必须介于1到63个字符之间
创建用户后,必须授予他们对数据库和表的权限
在secure集群上,你必须为用户创建客户端证书,并且用户必须验证其对集群的访问权限
所需权限
要创建其他用户,该用户必须是管理员角色或具有创建者角色。
语法图
- CreateUserStmt
参数介绍
参数 | 简介 |
---|---|
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;
所需权限
非管理员用户无法删除管理员用户。要删除非管理员用户,该用户必须是管理员角色或具有创建者角色。
用户被删除前,必须删除该用户的所有权限。
语法图
- DropUserStmt
参数介绍
参数 | 简介 |
---|---|
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
语句可用于添加、更改或删除用户的密码以及更改用户的角色选项
所需权限
要更改其他用户,该用户必须是管理员角色或具有创建者角色。
语法图
- AlterUserStmt
参数介绍
参数 | 简介 |
---|---|
password | 数据库的密码 |
user_name | 数据库用户名 |
修改用户只需要将create关键字换成alter
例如:修改密码
alter user beagledata with password 'password123';
该SHOW ROLES
语句列出了所有数据库的角色
查看所有数据库上的角色,需要admin
权限。
语法图
- ShowRoleStmt
展示角色语句
show roles;
CREATE ROLE
语句创建SQL角色
所需权限
创建一个角色,除非角色是管理员角色或者角色必须具有创建者权限。
语法图
- CreateRoleStmt
- IfNotExists
- RoleSpec
参数介绍
参数 | 简介 |
---|---|
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
语句删除一个或多个角色
事项说明
admin
角色不能被删除,并且root
必须始终是 的成员admin
。REVOKE
删除权限。所需权限
若要删除非管理员角色,该角色必须是管理员角色或具有创建者角色。
语法图
- DropRoleStmt
- RolenameList
参数介绍
参数 | 简介 |
---|---|
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;
显示权限授予
使用以下语法显示授予用户对数据库对象的权限,DATABASE
省略时,将列出当前数据库中的模式、表和类型
show grants [ON [DATABASE | SCHEMA | TABLE | TYPE] <targets...>] [FOR <users...>]
显示角色授权
使用以下语法显示集群中用户的角色授予
show grants on role [<roles...>] [FOR <users...>]
列出所有数据库对象的权限信息。
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;
用于添加一个角色或者角色中的一个用户。
所需权限
授予角色成员资格的用户必须是角色管理员或者是admin
角色的成员
root
用户会自动作为 admin
角色 且对所有数据库拥有 ALL
权限。GRANT
用于控制每一个角色或者用户和指定数据库或数据表上拥有的sql
权限,对于指定语句所需要的权限,请查看各自相关sql
语句的文档。
支持的权限如下:
权限 | 级别 |
---|---|
ALL | Database,Table |
CREATE | Database,Table |
DROP | Database,Table |
GRANT | Database,Table |
SELECT | Table |
INSERT | Table |
DELETE | Table |
UPDATE | Table |
语法图
- GrantStmt
- PrivElemList
- PrivElem
- PrivType
- ObjectType
- UserSpecList
参数介绍
参数 | 简介 |
---|---|
PrivType | 一般指的是具体的权限类型 |
ObjectType | 对象类型,一般是TABLE 或DATABASE |
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下)所有表insert
和update
权限
grant insert,update on table test.* to do_create_user;
创建用户后根据实际需要赋予admin权限,一般情况下,同一应用系统只有一个用户能拥有admin权限
grant admin to beagledata with admin option;
该REVOKE
语句撤销用户和或角色的权限。
所需权限
要撤消权限,撤消权限的用户必须GRANT
对目标数据库、模式、表或用户定义类型具有权限。除了GRANT
特权之外,撤销特权的用户还必须对目标对象具有被撤销的特权。例如,一个用户将SELECT
一个表的权限撤销给另一个用户,就必须拥有该表的GRANT
和SELECT
权限。
要撤销角色成员资格,撤销角色成员资格的用户必须是角色管理员(即,带有 的成员WITH ADMIN OPTION
)或admin
角色成员。要删除admin
角色的成员资格,用户必须拥有WITH ADMIN OPTION
该admin
角色。
支持的权限如下:
权限 | 级别 |
---|---|
ALL | Database,Table |
CREATE | Database,Table |
DROP | Database,Table |
GRANT | Database,Table |
SELECT | Table |
INSERT | Table |
DELETE | Table |
UPDATE | Table |
USAGE | Schema , Type |
ZONECONFIG | Database , Table |
语法图
- RevokeStmt
- PrivElemList
- PrivElem
- PrivType
- ObjectType
- UserSpecList
参数介绍
参数 | 简介 |
---|---|
PrivType | 一般指的是具体的权限类型 |
ObjectType | 对象类型,一般是TABLE 或DATABASE |
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;