1 role
CQL使用数据库角色来表示用户和用户组
1.1 创建角色
CREATE ROLE role001;
CREATE ROLE role002 WITH PASSWORD = '123456' AND LOGIN = true;
CREATE ROLE role003 WITH PASSWORD = '123456' AND LOGIN = true AND SUPERUSER = true;
默认情况下角色不具有login特权或superuser状态。
数据库资源的权限被授权给角色,资源类型包括keyspaces, tables, functions and roles它们自身;角色可以授权给其他角色来创建分层结构权限,在这些层次结构中,权限和SUPERUSER状态是继承的,但login权限不是。
只有对数据库角色资源具有CREATE权限的客户端才能发出CREATE ROLE请求,除非该客户端是SUPERUSER。
如果角色名称包含非字母数字字符,则应使用引号。
1.2 修改角色
执行语句role修改的条件
- 只有超级用户状态才能添加或删除另一个角色的超级用户状态
- 角色无法更改自身的超级用户状态
- 角色只能修改登录时标识的角色的某些属性(例如密码)
- 要修改角色的属性,必须向客户端授予该角色的ALTER权限<cql权限>
1.3 删除角色
- DROP ROLE要求客户端对所讨论的角色具有DROP权限<cql权限>
- 客户端可能不会删除登录时标识的角色
- 只有具有SUPERUSER状态的客户端可以删除另一个SUPERUSER角色
1.4 授权角色
循环授权是不允许的
将role003授权给role001,role001的login和superuser状态未改变,尝试登录也被拒绝。
给role003授权
grant select ON KEYSPACE system_auth TO role003;
将role003授权给role002
GRANT role003 TO role002;
使用role002登录
未授权以前
授权以后
使用role002登录,可以正常查询system_auth.roles和system_auth.role_permissions表。
可以看到role002的superuser状态还是false,实际上继承了role003的superuser状态。
尝试使用role002给role001更改superuser状态
1.5 回收角色
1.6 列出角色
返回系统中的所有已知角色,这需要有对数据库角色资源的describe权限。
revoke role003 from role001;
grant role003 to role002;
grant role002 to role001;
列举授予role001的所有角色,包括通过传递获得的角色:
列出直接授予role001的所有角色,不包括任何通过传递获得的角色:
2 user
在Cassandra 2.2引入角色之前,身份验证和授权是基于用户的概念。为了向后兼容,保留了传统语法,以用户为中心的语句成为基于ROLE的等效语句的同义词。换句话说,创建/更新用户只是创建/更新角色的不同语法。
2.1 创建用户
CREATE USER命令相当于CREATE ROLE,其中LOGIN选项为true。
CREATE USER user001;
CREATE USER user002 WITH PASSWORD '123456';
CREATE USER user003 WITH PASSWORD '123456' SUPERUSER;
2.2 修改用户
2.3 删除用户
2.4 授权用户
将所有keyspace的查询权限授权给user002。
grant select on ALL KEYSPACES TO user002;
grant AUTHORIZE on ALL KEYSPACES TO user002;
只有拥有resource资源的AUTHORIZE权限才能给其他用户授权resource资源权限
2.5 回收权限
REVOKE select ON TABLE system_auth.roles from user001;
2.6 列出用户
请注意,此语句等效于LIST ROLES,但只有具有“登录”权限的角色才会包含在输出中。