1 role

CQL使用数据库角色来表示用户和用户组

1.1 创建角色

Cassandra role和user_客户端

CREATE ROLE role001;

CREATE ROLE role002 WITH PASSWORD = '123456' AND LOGIN = true;

CREATE ROLE role003 WITH PASSWORD = '123456' AND LOGIN = true AND SUPERUSER = true;

Cassandra role和user_角色名_02

默认情况下角色不具有login特权或superuser状态。

数据库资源的权限被授权给角色,资源类型包括keyspaces, tables, functions and roles它们自身;角色可以授权给其他角色来创建分层结构权限,在这些层次结构中,权限和SUPERUSER状态是继承的,但login权限不是。

只有对数据库角色资源具有CREATE权限的客户端才能发出CREATE ROLE请求,除非该客户端是SUPERUSER。

如果角色名称包含非字母数字字符,则应使用引号。

1.2 修改角色

Cassandra role和user_客户端_03

Cassandra role和user_客户端_04

执行语句role修改的条件

  • 只有超级用户状态才能添加或删除另一个角色的超级用户状态
  • 角色无法更改自身的超级用户状态
  • 角色只能修改登录时标识的角色的某些属性(例如密码)
  • 要修改角色的属性,必须向客户端授予该角色的ALTER权限<cql权限>

1.3 删除角色

Cassandra role和user_数据库_05

  • DROP ROLE要求客户端对所讨论的角色具有DROP权限<cql权限>
  • 客户端可能不会删除登录时标识的角色
  • 只有具有SUPERUSER状态的客户端可以删除另一个SUPERUSER角色

1.4 授权角色

Cassandra role和user_角色名_06

循环授权是不允许的

将role003授权给role001,role001的login和superuser状态未改变,尝试登录也被拒绝。

Cassandra role和user_角色名_07

给role003授权

grant select ON KEYSPACE system_auth TO role003;

将role003授权给role002

GRANT role003 TO role002;

使用role002登录

未授权以前

Cassandra role和user_角色名_08

授权以后

Cassandra role和user_客户端_09

使用role002登录,可以正常查询system_auth.roles和system_auth.role_permissions表。

可以看到role002的superuser状态还是false,实际上继承了role003的superuser状态。

尝试使用role002给role001更改superuser状态

Cassandra role和user_数据库_10

1.5 回收角色

Cassandra role和user_客户端_11

Cassandra role和user_数据库_12

1.6 列出角色

Cassandra role和user_客户端_13

返回系统中的所有已知角色,这需要有对数据库角色资源的describe权限。

Cassandra role和user_角色名_14

revoke role003 from role001;

grant role003 to role002;

grant role002 to role001;

列举授予role001的所有角色,包括通过传递获得的角色:

Cassandra role和user_角色名_14

列出直接授予role001的所有角色,不包括任何通过传递获得的角色:

Cassandra role和user_客户端_16

2 user

在Cassandra 2.2引入角色之前,身份验证和授权是基于用户的概念。为了向后兼容,保留了传统语法,以用户为中心的语句成为基于ROLE的等效语句的同义词。换句话说,创建/更新用户只是创建/更新角色的不同语法。

2.1 创建用户

Cassandra role和user_数据库_17

CREATE USER命令相当于CREATE ROLE,其中LOGIN选项为true。

Cassandra role和user_角色名_18

CREATE USER user001;

CREATE USER user002 WITH PASSWORD '123456';

CREATE USER user003 WITH PASSWORD '123456' SUPERUSER;

Cassandra role和user_客户端_19

2.2 修改用户

Cassandra role和user_数据库_20

2.3 删除用户

Cassandra role和user_客户端_21

2.4 授权用户

将所有keyspace的查询权限授权给user002。

grant select on ALL KEYSPACES TO user002;

grant AUTHORIZE on ALL KEYSPACES TO user002;

Cassandra role和user_角色名_22

只有拥有resource资源的AUTHORIZE权限才能给其他用户授权resource资源权限

2.5 回收权限

REVOKE select ON TABLE system_auth.roles from user001;

2.6 列出用户

Cassandra role和user_角色名_23

请注意,此语句等效于LIST ROLES,但只有具有“登录”权限的角色才会包含在输出中。