スキーマ情報のセキュリティ保護
スキーマおよび操作データを含むテーブルへのアクセスを制限します。
スキーマ情報と対応する操作情報は、
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)
