2017-02-03 5 views
1

Wir haben einen Anwendungsfall, wo wir einen Benutzer erstellen und bieten CREATE, ALTER, SELECT, MODIFY und AUTHORIZE Berechtigungen für alle Schlüsselbereiche, da sie Schlüsselbereich erstellen und sie bei Bedarf löschen können. Wir möchten jedoch die Benutzer darauf beschränken, Änderungen am System-Schlüsselbereich vorzunehmen.Wie beschränken Benutzer Zugriff auf nur Systemtabelle in 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 

Ich versuchte, es zu widerrufen, nachdem es auf allen Schlüsselräumen gewährt wurde, aber es funktioniert nicht.

REVOKE SELECT on keyspace system from test; 

Gibt es eine Möglichkeit, dies zu erreichen, ohne Zugriff auf jeden Schlüsselbereich zu gewähren?

Antwort

1

Sie können bestimmte Tabellen im Systemtastenbereich nicht einschränken. Sie sind für alle Treiberfunktionen erforderlich, sodass sie nicht blockiert werden können. Wenn Sie eine gültige Benutzeranmeldung haben, müssen sie geöffnet sein und Cassandra wird automatisch allen Benutzern die Berechtigung erteilen, auf sie zuzugreifen, auch wenn Sie die Rollen ändern.


Quellcode für diese:

Siehe 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))); 

Dieser Code erstellt die READABLE_SYSTEM_RESOURCES oben, die an jedem authentifizierten Benutzer stets lesbar sind.

Siehe hasAccess returning (passing) if trying to select from those tables

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

Docs Beschreibung dieser http://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureObjectPerms.html

Verwandte Themen