アクセス制御のベストプラクティス

このトピックでは、Snowflakeアカウントとアカウント内に保存されたデータへのセキュリティアクセスを管理するためのベストプラクティスと重要な考慮事項について説明します。主に、ユーザーのロールに基づいてオブジェクトへのアクセスを制限するロールベースのアクセス制御 (RBAC) を構成するための一般的なガイダンスを提供します。ユーザーベースのアクセス制御 (UBAC) に関する具体的な検討事項については、 UBAC と RBAC の比較対照 をご参照ください。

このトピックの内容:

ACCOUNTADMIN ロールの使用

アカウント管理者 (ACCOUNTADMIN システムロールを持つユーザー) ロールは、システムで最も強力なロールです。アカウントレベルでパラメーターを設定する責任があるのは、このロールのみです。ACCOUNTADMIN ロールを持つユーザーは、Snowflakeの請求およびクレジットデータを表示および管理でき、実行中の SQL ステートメントを停止できます。

ACCOUNTADMINはスーパーユーザーロール ではない ことに注意してください。このロールは、このロール、または ロール階層 の下位のロールがオブジェクトに対して十分な権限を持っている場合にのみ、アカウント内のオブジェクトの表示と管理を許可します。

システムロール階層では、他の管理者ロールはこのロールの子です。

  • ユーザー管理者(USERADMIN)のロールには、ユーザーとロールを作成および管理するための権限が含まれます(これらのロールまたはユーザーの所有権が別のロールに譲渡されていないことを前提としています)。

  • セキュリティ管理者(SECURITYADMIN システム定義)のロールには、アカウント内のオブジェクトに対する権限を付与、または取り消すためのグローバル MANAGE GRANTS 権限が含まれています。USERADMIN ロールは、デフォルトのアクセス制御階層におけるこのロールの子です。子のシステム定義のロールについての詳細は、 システム定義のロール をご参照ください。

  • システム管理者 (SYSADMIN) ロールには、ウェアハウス、データベース、およびすべてのデータベースオブジェクト (スキーマ、テーブルなど) を作成する権限が含まれます。

注意

デフォルトでは、アカウントがプロビジョニングされると、最初のユーザーに ACCOUNTADMIN ロールが割り当てられます。このユーザーは、USERADMINロールを割り当てられた1人以上の追加ユーザーを作成する必要があります。残りのすべてのユーザーは、USERADMINロール、またはグローバルのCREATE USER権限が付与されている別のロールのユーザーにより作成する必要があります。

ユーザーに対する ACCOUNTADMIN ロール割り当ての制御

Snowflakeは、 ACCOUNTADMIN ロールをユーザーに割り当てる際は、以下の点に注意することを 強く 推奨します。

  • このロールは、組織内の選択された/限られた人数にのみ割り当ててください。

  • ACCOUNTADMIN ロールを割り当てられたすべてのユーザーは、ログインに多要素認証(MFA)を使用する必要もあります(詳細については、 アクセス制御の構成 をご参照ください)。

  • このロールを少なくとも2人のユーザーに割り当てます。ACCOUNTADMIN ロールがあるユーザーのパスワードを忘れたり、紛失したりした場合は、厳格なセキュリティ手順に従ってください。これらの手順には、最長2営業日かかる場合があります。ACCOUNTADMIN ロールを複数のユーザーに割り当てると、ユーザーは互いのパスワードをリセットできるため、これらの手順を実行する必要がなくなります。

Tip

現従業員のメールアドレスを ACCOUNTADMIN ユーザーに割り当てることで、Snowflake サポートが緊急事態の連絡先を把握できるようになります。

ACCOUNTADMIN ロールを使ってオブジェクトを作成しない

ACCOUNTADMIN ロールは、システムで初期セットアップタスクを実行し、アカウントレベルのオブジェクトとタスクを日常的に管理することを意図したものです。そのため、これらのオブジェクトに最高レベルの安全なアクセスを持たせる絶対的な必要性がない限り、アカウントでオブジェクトを作成するために使用しないでください。ACCOUNTADMIN ロールでオブジェクトを作成し、ユーザーにこれらのオブジェクトへのアクセスを許可する場合は、これらのユーザーのロールにオブジェクトに対する権限を明示的に付与する必要があります。

Snowflakeでは、組織のビジネス関数に沿ったロールの階層を作成し、最終的にこれらのロールを SYSADMIN にアサインします。詳細については、このトピックの オブジェクトアクセスとビジネス機能の整合 をご参照ください。

Tip

アカウント管理者が誤って ACCOUNTADMIN ロールを使用してオブジェクトを作成するのを防ぐために、これらのユーザーに追加のロールを割り当て、これらのロールのいずれかを既定のロールとして指定してください(システム内のどのユーザーに対しても、 ACCOUNTADMIN を既定のロールにしないでください)。

これは、ユーザーが ACCOUNTADMIN ロールを使用してオブジェクトを作成することを妨げるものではありませんが、ログインするたびに明示的にロールを ACCOUNTADMIN に変更することを強制します。これにより、システムにおけるロールの目的/機能に対する認識を高め、ユーザーが所定のタスク(特にアカウント管理者タスク)を実行するのに適切なロールに変更することを促すことができます。

自動スクリプト用に ACCOUNTADMIN ロールを使用しない

Snowflakeでは、自動化スクリプトに ACCOUNTADMIN 以外のロールを使用することを推奨します。推奨されているように、SYSADMIN ロールの下にロール階層を作成する場合、SYSADMIN ロールまたは階層内の下位のロールを使用して、すべてのウェアハウスおよびデータベースオブジェクト操作を実行できます。発生する唯一の制限は、ユーザーまたはロールの作成または変更です。これらの操作は、SECURITYADMIN ロールまたは十分なオブジェクト権限がある別のロールがあるユーザーが実行する必要があります。

データベースオブジェクトへのアクセス

すべてのセキュリティ保護可能なデータベースオブジェクト(TABLE、FUNCTION、FILE FORMAT、STAGE、SEQUENCE など)は、DATABASE 内の SCHEMA オブジェクトに含まれています。その結果、データベースオブジェクトにアクセスするには、特定のデータベースオブジェクトに対する権限に加えて、ユーザーにコンテナデータベースおよびスキーマに対する USAGE 権限を付与する必要があります。

たとえば、 mydb.myschemamytable が作成されたとします。 mytable をクエリするには、ユーザーに少なくとも次の権限が必要がです。

データベース:

mydb 上での USAGE

スキーマ:

myschema 上での USAGE

テーブル:

mytable 上での SELECT

カスタムロールの管理

カスタムロールが最初に作成されると、孤立した状態にあります。ロールに関連付けられたオブジェクト権限を使用するユーザーにロールを割り当てる必要があります。カスタムロールは、カスタムロールによって作成されたオブジェクトを管理するロールにも付与する必要があります。

重要

デフォルトでは、ACCOUNTADMIN ロールでさえ、カスタムロールによって作成されたオブジェクトの変更やドロップはできません。カスタムロールは、ACCOUNTADMIN ロールに直接付与するか、できれば、SYSADMIN ロールを親とする階層内の別のロールに付与する必要があります。SYSADMIN ロールは ACCOUNTADMIN ロールによって管理されます。

ロール階層を作成する手順については、「ロール階層の作成」をご参照ください。

オブジェクトのアクセスとビジネス機能の整合

ロール階層を活用して、データベースオブジェクトへのアクセスを組織内のビジネス機能と整合させることを検討します。ロール階層では、継承関係を形成するために、ロールが他のロールに付与されます。下位レベルのロールに付与された権限は、上位レベルのロールに継承されます。

データベースオブジェクトへのアクセスを最適に制御するには、オブジェクトに対して異なる権限を持つオブジェクト アクセスロール の組み合わせを作成し、必要に応じて 機能ロール に割り当てます。

  • データベースオブジェクトまたはアカウントオブジェクト(ウェアハウスなど)に対して、ロールにアクセスするためのアクセス権限を付与します。

  • 機能ロールにアクセスロールを付与して、ロール階層を作成します。これらのロールは、組織のビジネス機能に対応し、これらの機能に必要なアクセスロールのキャッチオールとして動作します。

    必要に応じて、親子関係の上位レベルの機能ロールに、下位レベルの機能ロールを付与します。親ロールは、子ロールの権限を包含する必要があるビジネス機能にマップされます。

    ロール階層のベストプラクティスに従って、ロール階層における最上位の機能ロールをシステム管理者(SYSADMIN)のロールに付与します。システム管理者は、データベースオブジェクトに対する権限をこの階層の任意のロールに付与できます。

注釈

Snowflakeのオブジェクトアクセスロールと機能ロールの間に技術的な相違はありません。相違は、それらを論理的に使用して、権限のセットを集めてユーザーのグループに割り当てる方法にあります。

簡単な例として、アカウント内の2つのデータベース finhr に、それぞれ給与と従業員のデータが含まれているとします。組織内の会計士とアナリストは、それぞれのビジネス機能を実行するために、これらのデータベース内のオブジェクトに対して異なる権限を必要とします。会計士には fin に対する読み取り/書き込みアクセス権が必要ですが、 hr に対しては読み取り専用アクセスのみが必要な場合があります。人事担当者が、このデータベースのデータを管理しているからです。アナリストには、両方のデータベースへの読み取り専用アクセスが必要となる可能性があります。

既存のデータベースオブジェクトに対する権限は、アクセスロールと機能ロールの次の階層を介して付与されます。

注釈

各データベースに新しいオブジェクトが追加されたら、オブジェクトのタイプ(スキーマ、テーブル、表示など)に基づいて、そのオブジェクトの権限をロールに自動的に付与することを検討してください。詳細については、 将来の付与を使用した、付与管理の簡素化 (このトピック内)をご参照ください。

カスタムロール

説明

権限

db_hr_r

hr データベース内のテーブルに対する読み取り専用アクセスを許可するアクセスロール。

データベース hr 上の USAGE。

データベース hr 内にあるすべてのスキーマの USAGE。

データベース hr 内にあるすべてのテーブルの SELECT。

db_fin_r

fin データベース内のテーブルに対する読み取り専用アクセスを許可するアクセスロール。

データベース fin 上の USAGE。

データベース fin 内にあるすべてのスキーマの USAGE。

データベース fin 内にあるすべてのテーブルの SELECT。

db_fin_rw

fin データベース内のテーブルに対する読み取り/書き込みアクセスを許可するアクセスロール。

データベース fin 上の USAGE。

データベース fin 内にあるすべてのスキーマの USAGE。

データベース fin 内にあるすべてのテーブルの SELECT、 INSERT、 UPDATE、 DELETE。

accountant

組織内の会計士の機能ロール。

N/A

analyst

組織内のアナリストの機能ロール。

N/A

次の図は、この例のロール階層を示しています。

例: アクセスと機能ロールの階層

この例のアクセス制御を構成するには、次のようにします。

  1. この例では、ユーザー管理者(USERADMIN ロールを持つユーザー)またはアカウントの CREATE ROLE 権限がある別のロールとして、アクセスロールおよび機能ロールを作成します。

    CREATE ROLE db_hr_r;
    CREATE ROLE db_fin_r;
    CREATE ROLE db_fin_rw;
    CREATE ROLE accountant;
    CREATE ROLE analyst;
    
    Copy
  2. セキュリティ管理者(SECURITYADMIN ロールを持つユーザー)またはアカウントの MANAGE GRANTS 権限がある別のロールとして、アクセスそれぞれに対して必要となる最低限の権限を付与します。

    -- Grant read-only permissions on database HR to db_hr_r role.
    GRANT USAGE ON DATABASE hr TO ROLE db_hr_r;
    GRANT USAGE ON ALL SCHEMAS IN DATABASE hr TO ROLE db_hr_r;
    GRANT SELECT ON ALL TABLES IN DATABASE hr TO ROLE db_hr_r;
    
    -- Grant read-only permissions on database FIN to db_fin_r role.
    GRANT USAGE ON DATABASE fin TO ROLE db_fin_r;
    GRANT USAGE ON ALL SCHEMAS IN DATABASE fin TO ROLE db_fin_r;
    GRANT SELECT ON ALL TABLES IN DATABASE fin TO ROLE db_fin_r;
    
    -- Grant read-write permissions on database FIN to db_fin_rw role.
    GRANT USAGE ON DATABASE fin TO ROLE db_fin_rw;
    GRANT USAGE ON ALL SCHEMAS IN DATABASE fin TO ROLE db_fin_rw;
    GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN DATABASE fin TO ROLE db_fin_rw;
    
    Copy
  3. セキュリティ管理者(SECURITYADMIN ロールを持つユーザー)またはアカウントの MANAGE GRANTS 権限を持つ別のロールとして、 db_fin_rw アクセスロールを accountant 機能ロールに付与し、 db_hr_r db_fin_r アクセスロールを analyst 機能ロールに付与します。

    GRANT ROLE db_fin_rw TO ROLE accountant;
    GRANT ROLE db_hr_r TO ROLE analyst;
    GRANT ROLE db_fin_r TO ROLE analyst;
    
    Copy
  4. セキュリティ管理者(SECURITYADMIN ロールを持つユーザー)またはアカウントの MANAGE GRANTS 権限がある別のロールとして、 analyst ロールおよび accountant ロールの両方をシステム管理者(SYSADMIN)ロールに付与します。

    GRANT ROLE accountant,analyst TO ROLE sysadmin;
    
    Copy
  5. セキュリティ管理者(SECURITYADMIN ロールを持つユーザー)またはアカウントの MANAGE GRANTS 権限がある別のロールとして、組織内でこれらの機能を実行するユーザーにビジネス機能ロールを付与します。この例では、 analyst 機能ロールがユーザー user1 に付与され、 accountant 機能ロールがユーザー user2 に付与されています。

    GRANT ROLE accountant TO USER user1;
    GRANT ROLE analyst TO USER user2;
    
    Copy

データベースロールを使用したデータベースオブジェクトへのアクセスの管理

データベースロールは、そのスコープを除けば、アカウントレベルで作成される従来の ロール (カスタム アカウントロール) と基本的に同じです。つまり、データベース内のオブジェクトに対して SQL アクションを許可するために、 同じデータベース 内のデータベースロールに権限を付与することができます。

データベースロールは、次のユースケースを満たすことを目的としています。

管理のしやすさ:

データベースの所有者は、独自のデータベース内にあるセキュリティ保護が可能なオブジェクトへのアクセスを個別に管理できます。データベースの所有者は、次のアクションを実行できます。

  • データベースロールを作成し、管理する。

  • データベースロールに権限を付与する。

    データベースロールに付与されるオブジェクトに対する権限は、ロールが存在するデータベースに含まれるオブジェクトに対してスコープを設定する必要があります。あるデータベースのオブジェクト(テーブルや表示など)の権限を、別のデータベースのデータベース・ロールに付与することはできません。

    OWNERSHIP を含め、 任意の 権限を、データベース内のオブジェクトに対するデータベースロールに付与できます。データベース自体に対する OWNERSHIP 権限を保持できるのは、アカウントロールのみであることに注意してください。

  • ロール階層 を作成または拡張します。データベースロールを同じデータベース内の他のデータベースロールに付与してから、データベース内の最高レベルのデータベースロールをアカウントロールに付与します。詳細については、 ロール階層と権限の継承 をご参照ください。

    データベースロールをアカウントロールに付与すると、データベースロールを含むデータベースに対する USAGE 権限がそのアカウントロールに暗黙的に付与されることに注意してください。データベースに対する USAGE 権限を明示的に付与する必要はありません。

データ共有:

Snowflakeの Secure Data Sharing のデータプロバイダーは、データベース内に複数のデータベースロールを作成して共有し、データベース内のオブジェクトのサブセットに対する権限を各データベースロールに付与することで、共有内のセキュリティ保護可能なオブジェクトをセグメント化できます。データベースロールを含む共有からデータベースを作成した後、データコンシューマーは、各共有データベースロールを自分のアカウントにある1つ以上のアカウントレベルのロールに付与します。

データベースロールがない場合、データコンシューマーアカウントのアカウント管理者は、単一の権限 IMPORTED PRIVILEGES をロールに付与して、ユーザーが共有内の すべての データベースおよびデータベースオブジェクト(テーブル、セキュアビューなど)にアクセスできるようにします。データコンシューマーアカウント内のさまざまなユーザーグループを、共有オブジェクトのサブセットにアクセスできるようにするオプションはありません。このオールオアナッシングアプローチでは、データプロバイダーが複数の共有を作成して、同じデータベース内のさまざまなオブジェクトへのアクセス権を付与する必要があります。

データベースロールは、セッションで直接 アクティブ化 できないことに注意してください。セッションでアクティブ化できるアカウントロールにデータベースロールを付与します。

管理アクセススキーマを使用した助成金管理の一元化

データベースの通常の(管理されていない)スキーマでは、オブジェクトの所有者(1つ以上のオブジェクトの OWNERSHIP 権限を持つロール)は、それらのオブジェクトのアクセスを他のロールに付与することができます。さらに、それらのロールにオブジェクトの付与を管理する権限を付与するオプションもあります。

オブジェクトセキュリティをさらにロックダウンするには、管理アクセススキーマの使用を検討します。管理アクセススキーマでは、オブジェクトの所有者は付与を決定する能力を失います。スキーマ所有者(スキーマ上で OWNERSHIP 権限を持つロール)または MANAGE GRANTS 権限を持つロールのみが、スキーマ内のオブジェクトに権限を付与することができます(将来の付与 、一元化された権限管理を含む)。

MANAGE GRANTS グローバル権限を保持するロールは、現在の(付与者)ロールに追加の権限を付与できることに注意してください。

管理アクセススキーマの詳細については、 管理アクセススキーマの作成 をご参照ください。

将来の付与を使用した付与管理の簡素化

将来の付与では、指定したスキーマ内の特定のタイプのオブジェクト(テーブルや表示など)に対する権限の初期セットを定義することができます。新しいオブジェクトが作成されると、定義された権限がロールに自動的に付与され、付与管理が簡素化されます。

次のシナリオを考えてみましょう。特定のロールに、スキーマで作成されたすべての新しいテーブルに対する SELECT 権限が付与されます。後日、このロールから権限を取り消し、代わりに別のロールに付与する決定が下されます。新しいテーブルに ON FUTURE キーワードを使用し、既存のテーブルに ALL キーワードを使用すると、次のように、新しいテーブルと既存のテーブルの権限を付与および取り消すために SQL ステートメントはほとんど必要ありません。例:

-- Grant the SELECT privilege on all new (future) tables in a schema to role R1
GRANT SELECT ON FUTURE TABLES IN SCHEMA s1 TO ROLE r1;

-- / Create tables in the schema /

-- Grant the SELECT privilege on all new tables in a schema to role R2
GRANT SELECT ON FUTURE TABLES IN SCHEMA s1 TO ROLE r2;

-- Grant the SELECT privilege on all existing tables in a schema to role R2
GRANT SELECT ON ALL TABLES IN SCHEMA s1 TO ROLE r2;

-- Revoke the SELECT privilege on all new tables in a schema (future grant) from role R1
REVOKE SELECT ON FUTURE TABLES IN SCHEMA s1 FROM ROLE r1;

-- Revoke the SELECT privilege on all existing tables in a schema from role R1
REVOKE SELECT ON ALL TABLES IN SCHEMA s1 FROM ROLE r1;
Copy

将来の付与の詳細については、 オブジェクトに対する将来の付与の割り当て をご参照ください。

クエリ結果の表示

ユーザーは、別のユーザーが実行したクエリからの結果セットを表示できません。この動作は意図的なものです。セキュリティ上の理由から、クエリを実行したユーザーのみがクエリ結果にアクセスできます。

注釈

この動作は、オブジェクトのSnowflakeアクセス制御モデルに接続されて いません。ACCOUNTADMIN ロールを持つユーザーでも、別のユーザーが実行したクエリの結果を表示することはできません。

複製オブジェクトと付与された権限について

データベース、スキーマ、またはテーブルを複製すると、ソースオブジェクトのコピーが作成されます。複製オブジェクトには、複製が作成されたときにソースオブジェクトに存在するデータのスナップショットが含まれます。

複製オブジェクトは、Snowflakeでは新しいオブジェクトと見なされます。ソースオブジェクトに付与された権限は、複製オブジェクトには譲渡されません。ただし、複製されたコンテナオブジェクト(データベースまたはスキーマ)は、ソースオブジェクトに含まれるオブジェクトに対して付与された権限を保持します。例えば、複製スキーマは、テーブル、ビュー、UDFs、およびソーススキーマ内の他のオブジェクトに付与された権限を保持します。

複製の詳細については、 クローニングに関する考慮事項 および CREATE <オブジェクト> ... CLONE をご参照ください。

UBAC と RBAC の比較対照

ロールベースのアクセス制御(RBAC)は、Snowflakeのアクセス制御の基盤です。RBAC は、設計上、スケーラビリティと集中制御を提供します。RBAC を使用して、ロールに権限を付与し、そのロールにユーザーを割り当てることで、管理を簡素化し、一貫性を確保し、監査アクセスを容易にします。RBAC は一般的に、本番環境や企業レベルのガバナンスに推奨されます。ユーザーベースのアクセス制御 (UBAC) は、個人開発や共同作業などのユースケースを想定しています。

Streamlit アプリケーションの構築などの共同作業シナリオには、 UBAC の使用を検討する必要があります。共同開発プロセスにおいて、アセット所有者は、アセットをより多くのユーザーと共有する前に、アセットへのアクセスを制御したいと思うかもしれません。UBAC は、個々のユーザーに直接権限を与える柔軟性を提供することで、 RBAC を補完しています。UBAC は、よりきめ細かいアクセス制御モデルの恩恵を受けるシナリオで特に有用です。

UBAC はオブジェクト所有者に新しい権限レベルを与えるものではありません。現在、 RBAC のロールを使用してオブジェクトの所有者がそのオブジェクトへのアクセスを管理することを信頼している場合、 UBAC を使用しても、その信頼レベルは根本的に変わりません。オブジェクトの所有者は、 PUBLIC のような広範にアクセス可能なロールを含め、あらゆるロールにアクセスを許可する能力をすでに持っています。UBAC では、オブジェクトの所有者が特定のユーザーに直接アクセスを許可することができます。UBAC はクエリのパフォーマンスに影響を与えません。

UBAC を使用する場合に付与拡散を避ける

オブジェクト所有者がオブジェクトに無差別にアクセス権を与えるのを防ぐために、 管理アクセススキーマ を使用します。管理アクセススキーマは、オブジェクトの所有者が他のロールやユーザーにアクセスを許可する機能を削除します。スキーマ所有者または MANAGE GRANTS 権限を持つロールのみが、管理アクセススキーマ内のオブジェクトに権限を付与することができます。付与の拡散は、 UBAC または RBAC のいずれかを使用しているときに起こります。管理されたアクセススキーマの外では、オブジェクトの所有者は、 RBAC を使用するとき、 UBAC を使用するとき、任意のユーザーに権限付与できるのと同様に、アカウント内の任意のロールにアクセス権限を付与できます。

アカウントのアクセス制御権限の監視

ACCOUNT_USAGE の GRANTS_TO_ROLES ビューを使用して、ロール、ユーザー、アプリケーションに付与された権限を監視できます。詳細については、 GRANTS_TO_ROLES ビュー をご参照ください。

また、以下の方法でアカウントのアクセス制御権限を監視することができます。

  • 全ユーザーへの直接付与の表示

  • 特定ユーザーへの直接付与の表示

  • オブジェクトに与えられている権限の現在のセットの表示

  • スキーマの現在の権限の表示

  • データベーススキーマの権限の表示

  • ロールまたはユーザーに与えられている現在の権限セットの表示

例えば、すべてのユーザーへの直接付与を表示するには、以下のクエリを実行します:

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES
  WHERE granted_to = 'USER';
Copy

例えば、特定のユーザーに直接付与を表示する場合などです。

  1. 特定のユーザーへのすべてのグラントを表示するには、次のコマンドを実行します。

    SHOW GRANTS TO USER <user_name>;
    
    Copy
  2. 前のステップの結果をフィルターして、ロールを通してではなく、ユーザに直接付与された権限のみを表示します。

    SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())
     WHERE "role" is null;
    
    Copy

例えば、オブジェクトに与えられている権限の現在のセットを表示するには、 SHOW GRANTS コマンドを実行します。

注釈

特定のオブジェクトで SHOW GRANTS コマンドを実行するには、そのオブジェクトタイプに対して SHOW コマンドを実行する場合と同じオブジェクト権限が必要です。

例えば、テーブルに対して SHOW GRANTS コマンドを実行するには、テーブルとそのデータベース、スキーマに対して以下の権限が必要です。

データベース:

USAGE

スキーマ:

USAGE

テーブル:

任意の権限

たとえば、スキーマの現在の権限を表示するには、次のコマンドを実行します。

SHOW GRANTS ON SCHEMA <database_name>.<schema_name>;
Copy

たとえば、 カスタムロールの作成 で付与された database_a.schema_1 の権限を表示するには、次のコマンドを実行します。

SHOW GRANTS ON SCHEMA database_a.schema_1;
Copy

Snowflakeは次の結果を返します。

+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+
| created_on                    | privilege             | granted_on | name                 | granted_to | grantee_name             | grant_option | granted_by    |
|-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------|
| 2022-03-07 09:04:23.635 -0800 | USAGE                 | SCHEMA     | database_a.schema_1  | ROLE       | R1                       | false        | SECURITYADMIN |
+-------------------------------+-----------------------+------------+----------------------+------------+--------------------------+--------------+---------------+

また、 SHOW GRANTS コマンドを実行して、現在付与されている権限セットを表示することもできます。

  • ロール:

    SHOW GRANTS TO ROLE <role_name>;
    
    Copy

    例えば、カスタムロールとして作成されたロール r1 に付与された権限を表示するには、以下のコマンドを実行してください。

    SHOW GRANTS TO ROLE r1;
    
    Copy

    Snowflakeは次の結果を返します。

    +-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+
    | created_on                    | privilege | granted_on | name                 | granted_to | grantee_name | grant_option | granted_by    |
    |-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------|
    | 2022-03-07 09:08:43.773 -0800 | USAGE     | DATABASE   | D1                   | ROLE       | R1           | false        | SECURITYADMIN |
    | 2022-03-07 09:08:55.253 -0800 | USAGE     | SCHEMA     | D1.S1                | ROLE       | R1           | false        | SECURITYADMIN |
    | 2022-03-07 09:09:07.206 -0800 | SELECT    | TABLE      | D1.S1.T1             | ROLE       | R1           | false        | SECURITYADMIN |
    | 2022-03-07 09:08:34.838 -0800 | USAGE     | WAREHOUSE  | W1                   | ROLE       | R1           | false        | SECURITYADMIN |
    +-------------------------------+-----------+------------+----------------------+------------+--------------+--------------+---------------+
    
  • ユーザー:

    SHOW GRANTS TO USER <user_name>;
    
    Copy

    例えば、ユーザー user1 に付与された権限を表示するには、以下のコマンドを実行します。

    SHOW GRANTS TO USER user1;
    
    Copy

    Snowflakeは次の結果を返します。

    +-------------------------------+-----------+------------+---------------------------+-----------+------------+--------------+--------------+---------------+
    | created_on                    | privilege | granted_on | name                      |  role     | granted_to | grantee_name | grant_option | granted_by    |
    |-------------------------------+-----------+------------+---------------------------+-----------+------------+--------------+------------------------------|
    | 2025-05-07 09:08:43.773 -0800 | USAGE     | DATABASE   | test_db                   | null      | USER       | user1        | false        | SECURITYADMIN |
    | 2025-05-07 09:08:55.253 -0800 | USAGE     | SCHEMA     | test_db.test_sch          | null      | USER       | user1        | false        | SECURITYADMIN |
    | 2025-05-07 09:08:55.253 -0800 | SELECT    | TABLE      | test_db.test_sch.test_tbl | null      | USER       | user1        | false        | SECURITYADMIN |
    | 2025-05-07 09:08:34.838 -0800 | USAGE     | WAREHOUSE  | test_wh                   | null      | USER       | user1        | false        | SECURITYADMIN |
    +-------------------------------+-----------+------------+---------------------------+-----------+------------+--------------+--------------+---------------+