フェデレーション外部テーブルに対する権限の付与
外部スキーマの作成者がそのオーナーになります。このトピックでは、スキーマまたはそのテーブルに対する権限を他のユーザーに付与する方法について説明します。
MaxCompute はレイクハウスモードではデータソースのメタデータを永続化しないため、権限ポリシーはデータソースのオブジェクト名に基づいてアクセスを管理します。データソースのオブジェクト名が変更されると、関連付けられた権限は無効になります。これらの権限は、`REVOKE` コマンドを使用するか、権限ポリシーを削除することによって取り消す必要があります。古いポリシーが削除されない場合、同じ名前の新しいオブジェクトが権限を継承し、ユーザーに意図しないアクセスを許可してしまう可能性があります。
プロジェクトでテナントレベルのオブジェクト権限付与が有効になっている場合、外部スキーマを作成する前に、現在のプロジェクトを外部データソースにマウントする必要があります。そうしないと、操作は失敗します。
外部スキーマの管理に使用するプロジェクトの名前が test_lakehouse_project であると仮定します。
外部スキーマの作成
必要な権限
プロジェクトに対する `CreateSchema` 権限。
プロジェクトレベルのテナントリソースアクセス制御が有効になっている場合は、外部サーバーに対する `Usage` 権限が必要です。
操作手順
現在のプロジェクトを指定し、`CreateSchema` 権限を付与します。
-- 現在のプロジェクトを設定します。 use test_lakehouse_project; -- プロジェクトに対する CreateSchema 権限を RAM ユーザーに付与します。 GRANT CreateSchema ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;(オプション) プロジェクトレベルのテナントリソースアクセス制御が有効になっており、外部データソースを現在のプロジェクトにマウントしている場合は、プロジェクト内のユーザーに権限を付与します。
-- RAM アカウントシステムを現在のプロジェクトに追加します。 ADD accountprovider ram; -- RAM ユーザーを追加します。 ADD USER `RAM$xxx@test.aliyunid.com:test_user`; -- プロジェクトロールを作成します。 CREATE role test_lakhouse_role; -- 外部データソースの使用を許可する権限ポリシーをプロジェクトロールにアタッチします。 put policy /path/to/allow.policy ON role test_lakhouse_role; -- プロジェクトロールを RAM ユーザーに付与します。 GRANT role test_lakhouse_role TO `RAM$xxx@test.aliyunid.com:test_user`;allow.policyファイルには、次の内容が含まれています:{ "Version": "1", "Statement": [{ "Action": "odps:Usage", "Effect": "Allow", "Resource": ["acs:odps:*:servers/fs_hive"] }] }外部スキーマを作成します。
CREATE EXTERNAL SCHEMA IF NOT EXISTS es_hive3 with fs_hive ON 'default' ;
すべての外部スキーマの一覧表示
必要な権限
プロジェクトに対する `CreateInstance` 権限と `List` 権限。
操作手順
プロジェクトに対する `CreateInstance` 権限を RAM ユーザーに付与します。
GRANT CreateInstance ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;プロジェクトに対する `List` 権限を RAM ユーザーに付与します。
GRANT List ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;すべてのスキーマを一覧表示します。
SHOW schemas;
外部スキーマの詳細表示
必要な権限
スキーマに対する `Describe` 権限が必要です。
操作手順
スキーマに対する `Describe` 権限を RAM ユーザーに付与します。
GRANT DESCRIBE ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;外部スキーマの詳細を表示します。
DESC SCHEMA es_hive3;
外部スキーマのプロパティの変更
現時点では、外部スキーマのプロパティを変更することはできません。
外部スキーマの削除
必要な権限
スキーマに対する `Drop` 権限が必要です。
操作手順
スキーマに対する `Drop` 権限を RAM ユーザーに付与します。
GRANT DROP ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;外部スキーマを削除します。
DROP SCHEMA es_hive3;
外部スキーマの使用
必要な権限
標準の 3 層モデルのプロジェクトでは、特定の権限は必要ありません。
プロジェクトが 2 層モデルから 3 層モデルにアップグレードされた場合は、スキーマに対する `Describe` 権限が必要です。
操作手順
使用する外部スキーマを指定します。
USE SCHEMA es_hive3;プロジェクトが 2 層モデルから 3 層モデルにアップグレードされた場合は、指定されたスキーマに対する `Describe` 権限を付与する必要があります。
GRANT DESCRIBE ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;
外部スキーマ内のテーブルの一覧表示
必要な権限
スキーマに対する `List` 権限が必要です。
操作手順
スキーマに対する `List` 権限を RAM ユーザーに付与します。
GRANT List ON schema es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;外部スキーマ内のテーブルを一覧表示します。
SHOW tables IN es_hive3;
外部スキーマ内のテーブルのクエリ
必要な権限
テーブルに対する `Select` 権限が必要です。
操作手順
スキーマ内の特定のテーブルに対する `Select` 権限を RAM ユーザーに付与します。
GRANT SELECT ON TABLE es_hive3.t1 TO USER RAM$xxx@test.aliyunid.com:test_user;外部スキーマ内のテーブルをクエリします。
SELECT * FROM es_hive3.t1;
外部テーブルからのデータインポート
必要な権限
外部テーブルに対する `Select` 権限が必要です。
プロジェクトに対する `CreateTable` 権限と `CreateInstance` 権限が必要です。
操作手順
プロジェクトに対する `CreateTable` 権限を RAM ユーザーに付与します。
GRANT CreateTable ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;プロジェクトに対する `CreateInstance` 権限を RAM ユーザーに付与します。
GRANT CreateInstance ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;テーブルに対する `Select` 権限を付与します。
GRANT SELECT ON TABLE es_hive3.t1 TO USER RAM$xxx@test.aliyunid.com:test_user;外部テーブルから新しい内部テーブルにデータをインポートします。
CREATE TABLE default.t1_copy_ram3 AS SELECT * FROM t1;