如何限制用户只访问cassandra中的系统表

时间:2017-02-03 03:10:11

标签: cassandra datastax cql datastax-enterprise

我们有一个用例,我们创建一个用户并在所有键空间上提供CREATE,ALTER,SELECT,MODIFY和AUTHORIZE权限,因为他们可以创建键空间并在需要时删除它们。但是,我们希望限制用户对系统键空间进行任何更改。

LIST ALL PERMISSIONS OF test;

 role | username | resource        | permission
------+----------+-----------------+------------
 test |     test | <all keyspaces> |     CREATE
 test |     test | <all keyspaces> |      ALTER
 test |     test | <all keyspaces> |     SELECT
 test |     test | <all keyspaces> |     MODIFY
 test |     test | <all keyspaces> |  AUTHORIZE

我在所有键空间上授予它之后试图撤销它,但它没有工作。

REVOKE SELECT on keyspace system from test;

有没有办法实现这一点而不授予对每个键空间的访问权限?

1 个答案:

答案 0 :(得分:1)

您不能限制系统键空间中的某些表。它们是任何驱动程序功能所必需的,因此无法阻止它们。如果您拥有有效的用户登录,则必须打开它们,即使您更改了角色,Cassandra也会自动授予所有用户访问权限的权限。

此源代码:

请参阅building the list of always readable tables

// We want these system cfs to be always readable to authenticated users since many tools rely on them
// (nodetool, cqlsh, bulkloader, etc.)
for (String cf : Arrays.asList(SystemKeyspace.LOCAL, SystemKeyspace.PEERS))
    READABLE_SYSTEM_RESOURCES.add(DataResource.table(SystemKeyspace.NAME, cf));

SchemaKeyspace.ALL.forEach(table -> READABLE_SYSTEM_RESOURCES.add(DataResource.table(SchemaKeyspace.NAME, table)));

此代码构建READABLE_SYSTEM_RESOURCES,任何经过身份验证的用户都可以读取这些代码。

请参阅hasAccess returning (passing) if trying to select from those tables

if ((perm == Permission.SELECT) && READABLE_SYSTEM_RESOURCES.contains(resource))
    return;

描述这个的文档 http://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureObjectPerms.html

相关问题