制限された呼び出し元権限

ストアドプロシージャやSnowparkコンテナーサービスサービスなどの実行ファイルは、実行ファイルの所有者の権限(所有者の権限)または実行ファイルの呼び出し元の権限(呼び出し元の権限)で実行することができます。実行ファイルが呼び出し元の権限で実行される場合、呼び出し元が実行ファイルのコンテキスト外でそのアクションを実行する権限を持っている場合にのみ、実行ファイルはアクションを実行することができます。

制限された呼び出し元権限は、実行可能ファイルを呼び出し元権限で実行することを許可しますが、実行可能ファイルがどの呼び出し元権限で実行されるかを制限します。制限付き呼び出し権限では、管理者が明示的に許可しない限り、実行ファイルは特定の権限で実行できません。

呼び出し元グラントについて

管理者は、 呼び出し元グラント を使用して、実行ファイルがどの呼び出し元権限で実行できるかを定義します。例えば、呼び出し元がテーブルに対して SELECT と INSERT の権限を持っているにもかかわらず、実行可能ファイルを INSERT 権限で実行することを許可する呼び出し元グラントが存在しない場合、呼び出し元権限が制限された実行可能ファイルは、テーブルに作用する際に INSERT 権限で実行することはできません。

呼び出し元権限は、権限を与えるのではなく、呼び出し元が実行可能ファイルを実行するときに使用する既存の権限を制限するものです。例えば、呼び出し元がテーブルから選択するためにストアドプロシージャを実行する場合、呼び出し元は既にテーブル の SELECT 権限を持っていなければなりません。呼び出し元が付与する権限は、ストアドプロシージャが SELECT 権限で実行できるようにする必要があります。

呼び出し元グラントは、管理者によって実行可能ファイルを所有するロール 付与されます。 呼び出し元グラントは、実行ファイルがアクセスするテーブルやウェアハウスなどのオブジェクト において 付与されます。実行子がオブジェクトにアクセスしようとするとき、実行子の所有者に関連付けられた呼び出し権限が、呼び出し元の権限のどれを操作に使用できるかを決定するために使用されます。

制限された呼び出し元権限で実行される実行可能ファイル

実行可能ファイルを作成するユーザーは、実行可能ファイルが所有者の権利で実行されるか、発呼者の権利で実行されるか、または制限された発呼者の権利で実行されるかを定義します。制限付き呼び出し元権限を選択した場合、実行ファイルが必要とするすべての権限は、実行ファイルの所有者に付与される1つ以上の呼び出し元グラントで指定されなければなりません。

ストアドプロシージャの場合、 EXECUTE AS パラメーターは、プロシージャが所有者の権限で実行されるか、呼び出し側の権限で実行されるか、呼び出し側の制限付き権限で実行されるかを定義します。以下は、呼び出し元権限を制限して実行するプロシージャを定義する例です。

CREATE OR REPLACE PROCEDURE sp_pi()
  RETURNS FLOAT NOT NULL
  LANGUAGE JAVASCRIPT
  EXECUTE AS RESTRICTED CALLER
  AS
  $$
  RETURN 3.1415926;
  $$
  ;
Copy

制限された呼び出し元権限で実行される実行可能ファイルの制限リストについては、 呼び出し元権限が制限された実行ファイルの制限事項 を参照してください。

呼び出し元グラントの付与

呼び出し元グラントは、実行ファイルがアクセスするテーブルやデータベースなどのオブジェクト 付与されます。呼び出し元グラントは、実行ファイルを所有するロールまたはデータベースのロール に対して 付与されます。

管理者が発信者グラントを付与するために使用する GRANT ステートメントには、呼び出し元グラントを付与する方法によって、さまざまなバリエーションがあります。バリエーションは以下の通りです。

  • GRANT CALLER --- 特定のオブジェクトに呼び出し元許可を付与します。ステートメントによって作成された各呼び出し元許可は、実行可能対象が指定された権限で実行されることを許可します。

  • GRANT ALL CALLER PRIVILEGES --- 特定のオブジェクトに呼び出し元許可を付与します。ステートメントによって作成された呼び出し元許可によって、実行可能対象は呼び出し元のすべての権限で実行できるようになります。

  • GRANT INHERITED CALLER --- スキーマ、データベース、アカウントを共有している場合は、同じ型の現在および将来のオブジェクトすべてに呼び出し元許可を付与します。ステートメントによって作成された各呼び出し元許可は、実行可能対象が指定された権限で実行されることを許可します。

  • GRANT ALL INHERITED CALLER PRIVILEGES --- スキーマ、データベース、アカウントを共有している場合は、同じ型の現在および将来のオブジェクトすべてに呼び出し元許可を付与します。ステートメントによって作成された呼び出し元許可によって、実行可能対象は呼び出し元のすべての権限で実行できるようになります。

1つの GRANT ステートメントで、実行可能ファイルの所有者に複数の呼び出し元グラントを付与することができます。たとえば、 GRANT CALLER INSERT, SELECT ... の場合、 INSERT 権限と SELECT 権限の 2つの呼び出し元権限が付与されます。同様に、 GRANT ALL INHERITED CALLER PRIVILEGES ステートメントでは、指定されたオブジェクトタイプで付与可能なすべての権限について、呼び出し元が付与することになります。

呼び出し元グラントを付与するためのパラメーターを含む完全な構文については、 GRANT CALLER を参照してください。

以下は、管理者が呼び出し元権限を使用して、実行ファイルがどの呼び出し元権限で実行できるかを制御する方法の例です。

v1 ビューにアクセスする owner_role が所有する実行可能対象は、ビューの SELECT 権限で実行できます。

GRANT CALLER SELECT ON VIEW v1 TO owner_role;
Copy

db.sch スキーマにある任意のテーブルにアクセスする owner_role が所有する実行可能対象は、呼び出し元の SELECT および INSERT 権限で実行できます。

GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
Copy

現在のアカウントのスキーマにアクセスする owner_role が所有する実行可能対象は、呼び出し元のスキーマ上のすべての権限で実行できます。

GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
Copy

db.sch1.t1 テーブルにアクセスする、 db.r データベースロールが所有する実行可能対象は、テーブル上で SELECT 権限を使用して実行できます。

GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
Copy

my_db データベースにアクセスする、 owner_role が所有する実行可能対象は、データベース上で呼び出し元のすべての権限を使用して実行できます。

GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;
Copy

呼び出し元グラントの取り消し

管理者は、 REVOKE ステートメントを使用して、以前に呼び出し元グラントによって実行可能ファイルの所有者に付与された権限を取り消します。このステートメントは、呼び出し元グラントを取り消す方法によって、さまざまなバリエーションがあります。

  • REVOKE CALLER --- 特定のオブジェクトの特定の権限を取り消します。

  • REVOKE ALL CALLER PRIVILEGES --- 特定のオブジェクトのすべての権限を取り消します。実行ファイルがオブジェクトにアクセスしようとしても、呼び出し元の権限では実行できません。

  • REVOKE INHERITED CALLER --- スキーマ、データベース、アカウントを共有している場合、同じタイプの現在および将来のオブジェクトすべてについて、呼び出し元グラントを取り消します。指定されたリストの権限のみが取り消されます。

  • REVOKE ALL INHERITED CALLER PRIVILEGES --- スキーマ、データベース、アカウントを共有している場合、同じタイプの現在および将来のオブジェクトすべてについて、呼び出し元グラントを取り消します。すべての権限が取り消され、実行ファイルは呼び出し元の権限では実行できなくなります。

REVOKE INHERITED CALLER または REVOKE ALL INHERITED CALLER PRIVILEGES コマンドを実行しても、 GRANT CALLER ステートメントを使用してアカウント、データベース、またはスキーマ内の特定のオブジェクトに付与された呼び出し元グラントは取り消されません。たとえば、テーブル my_db.sch1.t1 の呼び出し元グラントを直接付与した場合、 REVOKE INHERITED CALLER SELECT ON ALL TABLES IN DATABASE my_db ... を実行しても t1 の呼び出し元グラントは取り消されません。

パラメーターを含む、呼び出し元グラントの取り消しの完全な構文については、 REVOKE CALLER を参照してください。

owner_role が所有する実行可能ファイルが現在のアカウントの表示にアクセスする場合、呼び出し元の権限で実行できなくなりました。

REVOKE ALL INHERITED CALLER PRIVILEGES ON ALL VIEWS IN ACCOUNT FROM ROLE owner_role;
Copy

owner_role が所有する実行ファイルが db.sch1 スキーマにアクセスする際、 USAGE 権限で実行できなくなりました。

REVOKE CALLER USAGE ON SCHEMA db.sch1 FROM ROLE owner_role;
Copy

呼び出し元グラントのリスト

ユーザーは、 SHOW CALLER GRANTS コマンドを使用して、呼び出し元グラントをリストすることができます。このコマンドを使用して、特定の所有者に付与されたすべての呼び出し元グラントをリストアップしたり (SHOW CALLER GRANTS TO ...)、特定のオブジェクト上のすべての呼び出し元グラントをリストアップしたり (SHOW CALLER GRANTS ON ... )することができます。

SHOW CALLER GRANTS ON ... コマンドを特定のオブジェクトに対して実行した場合、各行は以下のいずれかを示します。

  • 呼び出し側グラントがオブジェクトに直接付与されました。

    例えば、管理者が GRANT CALLER SELECT ON TABLE db.sch.t1 を実行した場合、 SHOW CALLER GRANTS ON TABLE db.sch.t1 の出力には行が含まれます。

  • オブジェクトは呼び出し元グラントを継承しています。

    例えば、管理者が GRANT INHERITED CALLER SELECT ON ALL TABLES IN SCHEMA db1.sch を実行した場合、 SHOW CALLER GRANTS ON TABLE db1.sch.t1 の出力には行が含まれます。

  • オブジェクトは IN 句で指定されたため、そのオブジェクトを含む他のオブジェクトは呼び出し元グラントを継承します。

    例えば、管理者が GRANT INHERITED CALLER SELECT ON ALL TABLES IN ACCOUNT を実行した場合、 SHOW CALLER GRANTS ON ACCOUNT の出力には行が含まれます。

  • オブジェクトは、継承された呼び出し元グラントを持つオブジェクトの祖先であり、継承をもたらした IN 句で指定されたオブジェクトの子孫でもあります。

    例えば、管理者が GRANT INHERITED CALLER SELECT ON ALL TABLES IN DATABASE my_db を実行した場合、 SHOW CALLER GRANTS ON SCHEMA my_db.sch1 には行が含まれます。

条件付き出力

SHOW CALLER GRANTS コマンドの出力は実行ロールの権限によって異なります。ユーザーが SHOW CALLER GRANTS を実行すると、その結果には、ユーザーが少なくとも1つの権限を持っているオブジェクトのみが含まれます。ユーザーは、たとえそのオブジェクトに呼び出し元グラントがあったとしても、そのオブジェクトにアクセスできなければ、そのオブジェクトの存在を知ることはできません。

たとえば、データベース DB1DB2 に呼び出し元グラントがあるとします。ここで、ロール R2DB1 に対して USAGE の権限を持っているが、 DB2 に対して権限を持っていないとします。 R2 が SHOW CALLER GRANTS を実行すると、出力は DB1 に呼び出し元グラントがあることを示しますが、 DB2 はリストされません。 R2 が両方のデータベースの権限を持っていた場合、出力は呼び出し元のグラントが両方のデータベースにあることを示します。

テーブル t1 に付与されている呼び出し元グラントをリストします。

SHOW CALLER GRANTS ON TABLE t1;
Copy

現在のアカウントに付与されているすべての呼び出し元グラントをリストします。これには、アカウントに対する直接のグラント(GRANTCALLER ... ONACCOUNT)と、アカウント内のすべてのオブジェクトに対するグラント (GRANT INHERITED CALLER ... IN ACCOUNT) が含まれます。

SHOW CALLER GRANTS ON ACCOUNT;
Copy

データベースロール db.owner_role に付与されたすべての呼び出し元グラントをリストします。

SHOW CALLER GRANTS TO DATABASE ROLE db.owner_role;
Copy

呼び出し元グラントの制限

呼び出し元グラントは複製もクローニングもされません。

呼び出し元権限が制限された実行ファイルの制限事項

実行ファイルが制限された呼び出し元権限で実行される場合、以下の制限を受けます。

外部ステージ

  • 実行ファイルは、ストレージ統合を指定せずに外部ステージを作成することはできません。

  • 実行ファイルを外部ステージにコピーできません。

  • ストレージ統合を指定しないと、実行ファイルを外部 URL にコピーできません。

ストアドプロシージャ

  • 実行可能ファイルは、所有者権限、呼び出し元権限、または制限付き呼び出し元権限で実行されるSnowflakeオブジェクトを作成できません。例えば、ストアドプロシージャを作成することはできません。

  • Executable は、ストアドプロシージャの実行権限を変更することはできません。例えば、実行ファイルはストアドプロシージャを所有者の権利から呼び出し側の権利に変更することはできません。

権限とロール

  • 実行ファイルは USE ROLE と USE SECONDARY ROLES コマンドを実行できません。

  • 実行可能ファイルでは、 GRANT ステートメントを使用して権限と呼び出し元を付与することはできません。

  • 実行可能ファイルでは、 REVOKE ステートメントを使用して権限や呼び出し元グラントを取り消すことはできません。

参照

  • 実行ファイルは一時的および永続的な リファレンス を作成できません。

セッション関連演算子

  • 実行ファイルは SET または UNSET コマンドを実行できません。

  • 実行ファイルは SHOW VARIABLES または SHOW PARAMETERS を実行できません。

  • 実行ファイルはセッション変数を使用または読み取ることができません。

  • ALTER SESSION を実行できません。

  • 実行ファイルはセッション・スコープの仮オブジェクトを作成できません。

  • 実行ファイルは USE DATABASE、 USE SCHEMA、 USE WAREHOUSE を実行できません。