2017-02-03 20 views
1

У нас есть пользователь, где мы создаем пользователя и предоставляем разрешения CREATE, ALTER, SELECT, MODIFY и AUTHORIZE для всех областей ключей, поскольку они могут создавать пространство ключей и при необходимости отбрасывать их. Однако мы хотим ограничить пользователей любыми изменениями в системном ключевом пространстве.Как ограничить доступ пользователей только к системной таблице в cassandra

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 

Я попытался отозвать его после предоставления ему всех keyspaces, но он не работает.

REVOKE SELECT on keyspace system from test; 

Есть ли способ достичь этого, не предоставляя доступ к каждому ключевому пространству?

ответ

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