CQL(Cassandra 查询语言)中的数据库角色
与 Apache Cassandra NoSQL 数据库通信时,需要使用 Cassandra 查询语言 (CQL)。可以使用 CQL 定义数据库角色并为其分配权限,这是 CQL 的一大特性。用户访问和权限在数据库中通过 Cassandra 的角色进行管理。
本文将讨论 Cassandra 中的角色及其工作原理,并提供使用 CQL 创建、更改和删除角色的示例。
Cassandra 的角色包含哪些内容?
Cassandra 中的角色是一种对象,它指定了一组可授予单个用户或用户组的权限。可以通过角色限制对数据库资源的访问。它们可用于授予或撤销执行特定数据库任务的权限,例如创建或编辑表或运行查询。
Cassandra 支持三种不同的角色
超级用户 − 此角色拥有所有数据库资源的完全访问权限。
Cassandra − 此角色可以管理性地访问数据库,但无法执行某些需要超级用户权限的任务。
DataStax − 此角色拥有数据库的管理访问权限,由 Cassandra 的营利性实现 DataStax Enterprise 使用。
在 CQL 中创建角色
在 Cassandra 中,可以使用 CREATE ROLE 语句创建新角色。创建新角色的语法如下:-
语法
CREATE ROLE role_name WITH PASSWORD = 'password' AND OPTIONS = {...};
Role_name 是将要创建的角色的名称,password 是此语句中角色的密码。您可以使用 choices 子句(可选)为职位定义额外的选项,例如登录权限或创建新角色的权限。
示例
以下是如何在 CQL 中创建新作业的示例:-
CREATE ROLE my_role WITH PASSWORD = 'my_password' AND LOGIN = true;
在此示例中,将创建一个名为 my_role 的新角色,密码为 my_password。由于 LOGIN 选项设置为 true,因此用户可以使用此角色登录数据库。
输出
角色"my_role"已创建
此命令创建一个名为"my_role"的新角色,其参数为"my_password"表示密码,"true"表示登录权限。在 Cassandra 数据库中,此角色现在可用于向用户或其他角色授予权限。
在 CQL 中向角色授予权限
在创建角色后,可以使用 GRANT 语句为其分配权限。为角色分配权限的语法如下:-
语法
GRANT privilege_name ON resource_name TO role_name;
在此语句中,要提供的权限、要授予该权限的资源以及要授予该权限的角色均通过 privilege_name、resource_name 和 role_name 三个术语来标识。
示例
以下是如何在 CQL 权限中提供角色的示例:-
GRANT SELECT, INSERT, UPDATE ON my_keyspace.my_table TO my_role;
在此示例中,我们授予 my_role 角色对 my_keyspace 键空间中 my_table 表的 SELECT、INSERT 和 UPDATE 操作的访问权限。
输出
上述 CQL 查询将授予"my_role"角色对"my_keyspace"键空间中"my_table"表的 SELECT、INSERT 和 UPDATE 权限。
此查询不会提供任何输出。如果查询成功,给定角色将立即获得请求的权限。
在 CQL 中修改角色
Cassandra 中的 ALTER ROLE 语句可用于更改角色。更改角色的语法如下:-
语法
ALTER ROLE role_name WITH PASSWORD = 'new_password' AND OPTIONS = {...};
role_name 是此语句中要更改的角色的名称,OPTIONS 可用于定义该角色的新选项。
示例
以下是如何在 CQL 中更改作业的示例:-
ALTER ROLE my_role WITH PASSWORD = 'new_password';
在此示例中,my_role 角色正在被修改,其密码将更改为 new_password。
输出
此命令会将现有角色的当前密码"my_role"替换为新密码"new_password"。如果查询运行正常,则查询本身不会产生任何其他输出。但是,为了使任何后续使用此角色的查询或操作都要求身份验证成功,必须使用更改后的密码。
在 CQL 中撤销角色
使用 REVOKE 语句,也可以撤销 Cassandra 中角色的权限。以下语法用于撤销特定角色的权限 -
语法
REVOKE privilege_name ON resource_name FROM role_name;
privilege_name、resource_name 和 role_name 分别表示此语句中要从每个资源和角色撤销的相应权限的名称。
示例
以下是在 CQL 中撤销角色权限的示例 -
REVOKE SELECT, INSERT, UPDATE ON my_keyspace.my_table FROM my_role;
在此示例中,我们将撤销 my_role 角色对 my_keyspace 键空间中 my_table 表的 SELECT、INSERT 和 UPDATE 权限。
输出
指定的 CQL 查询将删除"my_role"角色对"my_keyspace"键空间中"my_table"表的 SELECT、INSERT 和 UPDATE 权限。
此查询不会提供任何输出。如果查询运行正常,则已删除指定角色的权限。
在 CQL 中删除角色
Cassandra 中的 DROP ROLE 语句可用于删除角色。删除角色的语法如下:
语法
DROP ROLE role_name;
在此语句中,要删除的角色名称为 role_name。
以下是如何在 CQL 中删除角色的示例 -
示例
DROP ROLE my_role;
在本例中,我们将删除数据库中的 my_role 角色。
输出
使用此查询将从 Cassandra 键空间中删除"my_role"角色。如果该角色存在且查询成功,则该角色将被删除,并且不会显示更多输出。如果角色不存在,查询仍会正确运行,但键空间将保持不变,并且不会显示任何输出。
结论
Cassandra 角色系统是一个强大的工具,用于控制数据库内部的用户访问和权限。借助角色,您可以指定一组权限,这些权限可以提供给一个用户或一组用户,并管理他们对数据库资源的访问权限。在本文中,我们研究了如何使用 CQL 创建、编辑和删除角色,以及授予和撤销这些角色的访问权限。使用 Cassandra 需要了解职责,这也有助于您更有效地管理数据库资源。

