DCL(Data Control Language)主要包含用户角色管理(Database Role)语法和权限管理(Permission)语法。本节介绍DCL语法的说明和示例。
用户角色管理
Lindorm CQL语法使用Database Roles来表示用户角色。Role的定义如下:
role_name ::= identifier | string
Lindorm CQL与Apache Cassandra CQL对Database Role的操作相似。默认情况下,用户不具有登录权限或超级用户权限。
权限管理
Lindorm CQL语法支持对语言结构中的各层级授予权限,权限支持向下兼容,所以对上层结构中的资源授予权限会自动赋予该结构之下的所有资源相同的权限。例如:当对1个Keyspace授予SELECT权限后,该权限将自动授予Keyspace中的所有TABLE。
权限进行更改后,客户端不需要重新建立连接。
Lindorm CQL支持的权限有:CREATE
、ALTER
、DROP
、SELECT
、MODIFY
。
各权限对资源类型的支持情况如下表:
各权限对支持的资源类型有区分。若对无法应用权限的资源授予权限将导致错误。
权限类型 | 资源支持情况 | 可操作的语句 |
| ALL KEYSPACES | 在任意Keyspace执行 |
| KEYSPACE | 在某个特定Keyspace执行 |
| ALL KEYSPACES | 在任意Keyspace执行 |
| KEYSPACE | 在某个特定Keyspace执行 |
| ALL KEYSPACES | 在任意Keyspace执行 |
| KEYSPACE | 在某个特定Keyspace执行 |
| ALL KEYSPACES | 在任意Keyspace执行 |
| KEYSPACE | 在某个特定Keyspace执行 |
| TABLE | 在特定表下执行 |
| ALL KEYSPACES | 在任意Keyspace执行 |
| KEYSPACE | 在某个特定Keyspace执行 |
| TABLE | 在特定表下执行 |
CREATE ROLE
创建用户角色。
语法
create_role_statement ::= CREATE ROLE [ IF NOT EXISTS ] role_name
[ WITH role_options ]
role_options ::= role_option ( AND role_option )*
role_option ::= PASSWORD '=' string
| LOGIN '=' boolean
| SUPERUSER '=' boolean
| OPTIONS '=' map_literal
通过
CREATE ROLE
语句,可创建用户角色,必须指定登录密码。通过该语句,您也可指定登录权限或超级用户权限。默认情况下,Lindorm CQL的Database Role操作中,角色不具有超级用户权限。
参数
参数 | 说明 |
role_name | 指定用户角色名称。 |
role_option |
|
示例
CREATE ROLE role1 WITH PASSWORD = 'password_a' AND LOGIN = true;
CREATE ROLE role2 WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true;
DROP ROLE
删除用户。
语法
drop_role_statement ::= DROP ROLE [ IF EXISTS ] role_name
通过
DROP ROLE
语句,可删除用户。客户端对待删除的用户需具有删除权限。
客户端不能删除状态为正在登录的用户。
只有超级用户才可删除超级用户。
[ IF EXISTS ]
语句说明:若未使用该选项,尝试删除不存在的用户时会出现无效的查询条件。
若使用了该选项,尝试删除不存在的用户时,则该语句为
no-op
。
参数
参数 | 说明 |
role_name | 指定用户角色名称。 |
示例
DROP ROLE bob;
DROP ROLE IF EXISTS bob;
LIST ROLES
显示已有的用户角色。
语法
list_roles_statement ::= LIST ROLES [ OF role_name ]
参数
参数 | 说明 |
role_name | 指定用户角色名称。 |
示例
LIST ROLES;-- 超级用户才可执行
LIST ROLES OF role1;-- 展示某个用户的信息
GRANT PERMISSION
授予用户的权限。
语法
grant_permission_statement ::= GRANT permissions ON resource TO role_name
permissions ::= ALL [ PERMISSIONS ] | permission [ PERMISSION ]
permission ::= CREATE | ALTER | DROP | SELECT | MODIFY
resource ::= ALL KEYSPACES
| KEYSPACE keyspace_name
| [ TABLE ] table_name
参数
参数 | 说明 |
role_name | 指定用户角色名称。 |
permission |
|
resource | 指定被授予权限的资源,如 |
keyspace_name | 指定Keyspace名称。 |
table_name | 指定表名称。 |
示例
GRANT SELECT ON ALL KEYSPACES TO role;
GRANT SELECT ON KEYSPACE ks TO role;
REVOKE PERMISSION
撤销用户的权限。
语法
revoke_permission_statement ::= REVOKE permissions ON resource FROM role_name
参数
参数 | 说明 |
role_name | 指定用户角色名称。 |
permission |
|
resource | 指定被授予权限的资源,如 |
示例
REVOKE SELECT ON ALL KEYSPACES FROM role;
LIST PERMISSIONS
显示用户的各资源下所授权的权限。
语法
list_permissions_statement ::= LIST permissions [ ON resource ] [ OF role_name ]
ON resource
:限定资源。若未设置,则会显示用户下所有资源的权限信息。OF role_name
:限定用户。默认必须指定用户。仅超级用户可在不指定用户的情况下列举权限。
参数
参数 | 说明 |
role_name | 指定用户角色名称。 |
permissions |
|
resource | 指定被授予权限的资源,如 |
示例
LIST ALL PERMISSIONS OF role;
LIST ALL PERMISSIONS ON KEYSPACE kss OF role;