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支持的权限有:CREATEALTERDROPSELECTMODIFY

各权限对资源类型的支持情况如下表:
说明 各权限对支持的资源类型有区分。若对无法应用权限的资源授予权限将导致错误。
权限类型 资源支持情况 可操作的语句
CREATE ALL KEYSPACES 在任意keyspace执行CREATE KEYSPACESCREATE TABLE
CREATE KEYSPACE 在某个特定keyspace执行CREATE TABLE
ALTER ALL KEYSPACES 在任意keyspace执行ALTER KEYSPACESALTER TABLE
ALTER KEYSPACE 在某个特定keyspace执行ALTER TABLE
DROP ALL KEYSPACES 在任意keyspace执行DROP KEYSPACESDROP TABLE
DROP KEYSPACE 在某个特定keyspace执行DROP TABLE
SELECT ALL KEYSPACES 在任意keyspace执行SELECT KEYSPACESSELECT TABLE
SELECT KEYSPACE 在某个特定keyspace执行SELECT TABLE
SELECT TABLE 在特定表下执行SELECT操作。
MODIFY ALL KEYSPACES 在任意keyspace执行MODIFY KEYSPACESMODIFY TABLE
MODIFY KEYSPACE 在某个特定keyspace执行MODIFY TABLE
MODIFY TABLE 在特定表下执行MODIFY操作。

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
  • PASSWORD

    标示用户登录的密码信息。

    说明 PASSWORD参数必须设置。
  • LOGIN

    标示用户是否具有登录权限。默认为False。

    说明 若用户具备登录权限,则客户端在连接时,会被标识为该用户的角色,即:在连接期间,客户端可获得授予该用户的权限。
  • SUPERUSER

    标示用户是否为超级用户。

    说明 超级用户具备以下权限:
    • 支持创建超级用户。
    • 具备Drop Keyspace、Drop Table、Truncate权限。
    • 授权数据库资源角色权限。资源类型包括:Keyspace、Table。
    • 支持创建层次权限结构。
示例
CREATE ROLE role1 WITH PASSWORD = 'password_a' AND LOGIN = true;
CREATE ROLE role2 WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true;

ALTER ROLE

更改用户角色选项。

语法
alter_role_statement ::=  ALTER ROLE role_name WITH role_options
说明 通过ALTER ROLE语句,可修改用户的登录密码,登录权限和超级用户身份。
参数

ALTER ROLE语句和CREATE ROlE语句的参数说明相同,请参见参数说明

示例
ALTER ROLE bob WITH PASSWORD = 'PASSWORD_B' AND SUPERUSER = false;

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
  • CREATE

    指定具有“创建“的权限。

  • ALTER

    指定具有更换的权限。

  • DROP

    指定具有删除的权限。

  • SELECT

    指定具有选择的权限。

  • MODIFY

    指定具有修改的权限。

resource 指定被授予权限的资源,如ALL KEYSPACESKEYSPACETABLE
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
  • CREATE

    指定具有创建的权限。

  • ALTER

    指定具有更换的权限。

  • DROP

    指定具有删除的权限。

  • SELECT

    指定具有选择的权限。

  • MODIFY

    指定具有修改的权限。

resource 指定被授予权限的资源,如ALL KEYSPACESKEYSPACETABLE
示例
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
  • CREATE

    指定具有创建的权限。

  • ALTER

    指定具有更换的权限。

  • DROP

    指定具有删除的权限。

  • SELECT

    指定具有选择的权限。

  • MODIFY

    指定具有修改的权限。

resource 指定被授予权限的资源,如ALL KEYSPACESKEYSPACETABLE
示例
LIST ALL PERMISSIONS OF role; 
LIST ALL PERMISSIONS ON KEYSPACE kss OF role;