我们有一个用例,我们创建一个用户并在所有键空间上提供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;
有没有办法实现这一点而不授予对每个键空间的访问权限?
答案 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