スキーマ情報のセキュリティ保護

スキーマおよび操作データを含むテーブルへのアクセスを制限します。

スキーマ情報と対応する操作情報は、systemおよびsystem_schemaキースペースに格納されます。デフォルトでは、DSE Unified Authentication(DSE統合認証)が有効になっている場合、ロールにはいくつかのテーブルへのフル・アクセス権が付与されます(以下に示します)。これらのテーブル内のロールが表示できるデータを制限するには、system_keyspaces_filteringを有効にして、キースペースのDESCRIBEパーミッションを付与します。ロールがsystemまたはsystem_schemaキースペース内のテーブルに対してクエリーを実行すると、DESCRIBEパーミッションを持つキースペースと一致する行のみがクエリー結果に返されます。
ヒント: システムおよびスキーマのキースペース・フィルタリングはスーパーユーザーには適用されません。スーパーユーザー・ロールは、RESTRICT文によってアクセスが拒否されているリソースを除くすべてのリソースにアクセスできます。
システム・キースペース・フィルタリングが無効になっている場合、すべてのユーザーに次のアクセス権があります。
キースペース テーブル デフォルトのアクセス
system size_estimates フル
available_ranges フル
local フル*
peers フル*
sstable_activity なし
IndexInfo なし
built_views なし
views_builds_in_progress なし
system_schema tables フル
triggers フル
views フル
keyspaces フル
dropped_columns フル
functions フル
aggregates フル
indexes フル
types フル
columns フル
*フィルタリングが有効になっている場合でも、すべてのロールにlocalおよびpeersテーブルへのフル・アクセス権があります。

デフォルトでは、ロールはsystem_auth、system_trace、およびsystem_distributedキースペース内のデータにアクセスできません。アクセスを許可するには、キースペースまたはテーブルにSELECTパーミッションを付与します。

以下では、内部の非スーパーユーザー・アカウントmartinを使用しています。

  1. cqlshを使用して内部ログイン・ロールを作成します。
    CREATE ROLE martin WITH LOGIN = true AND PASSWORD = 'password';
  2. martinとしてログインします。
    LOGIN martin
  3. martinがリストできるsystem_schema.tables内のテーブルの数をカウントします。
    SELECT count(*) FROM system_schema.tables;
    結果は、クラスター全体に存在するテーブルの数です。
     count
    -------
        75
    
    (1 rows)
  4. system_keyspaces_filteringtrueに設定し、ノードを再起動します。
  5. martinとしてcqlshにログインします。
    cqlsh -u martin -p password
  6. martinがリストできるsystem_schema.tables内のテーブルの数をカウントします。
    SELECT keyspace_name, count(*) AS tables 
    FROM system_schema.tables 
    GROUP BY keyspace_name;
    martinがスーパーユーザーではなく、他のテーブルへの記述アクセス権がないと仮定すると、アカウントは18個のテーブルのみをリストできます。
     keyspace_name | tables
    ---------------+--------
     system_schema |     10
            system |      8
    
    (2 rows)
  7. martinがcyclingテーブルに関する詳細情報を表示できるようにするには、cyclingキースペースでDESCRIBEアクセスを許可します。
    GRANT DESCRIBE ON KEYSPACE cycling TO martin;
  8. martinとしてログインします。
    LOGIN martin
  9. martinがcyclingキースペースのテーブルを表示できることを確認します。
    SELECT keyspace_name, count(*) AS tables 
    FROM system_schema.tables 
    GROUP BY keyspace_name;
    結果には、martinが各キースペースにリストできるテーブルの数が表示されます。
     keyspace_name | tables
    ---------------+--------
           cycling |     25
     system_schema |     10
            system |      8
    
    (3 rows)