スキーマ情報のセキュリティ保護
スキーマおよび操作データを含むテーブルへのアクセスを制限します。
スキーマ情報と対応する操作情報は、
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
を使用しています。
- cqlshを使用して内部ログイン・ロールを作成します。
CREATE ROLE martin WITH LOGIN = true AND PASSWORD = 'password';
- martinとしてログインします。
LOGIN martin
martin
がリストできるsystem_schema.tables
内のテーブルの数をカウントします。SELECT count(*) FROM system_schema.tables;
結果は、クラスター全体に存在するテーブルの数です。count ------- 75 (1 rows)
- system_keyspaces_filteringを
true
に設定し、ノードを再起動します。 martin
としてcqlshにログインします。cqlsh -u martin -p password
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)
martin
がcyclingテーブルに関する詳細情報を表示できるようにするには、cyclingキースペースでDESCRIBEアクセスを許可します。GRANT DESCRIBE ON KEYSPACE cycling TO martin;
- martinとしてログインします。
LOGIN martin
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)