カテゴリ:

コンテキスト関数 (セッションオブジェクト)

IS_ORGANIZATION_USER_GROUP_IN_SESSION

ロールが 組織のユーザーグループ からインポートされたと仮定して、そのロールがセッションのユーザーのアクティブなプライマリロール階層またはセカンダリロール階層にあるかどうかを検証します。

指定されたロールが組織ユーザーグループにリンクされていない場合、関数は FALSE を返します。

こちらもご参照ください。

高度な列レベルセキュリティのトピック

構文

IS_ORGANIZATION_USER_GROUP_IN_SESSION( '<string_literal>' )
Copy

引数

'string_literal'

ロールの名前。

戻り値

TRUE

現在のユーザーのセッション内のアクティブな プライマリロールまたはセカンダリロール は指定されたロールの権限を継承します。

DEFAULT_SECONDARY_ROLES 値が ALL の場合は、ユーザーに付与された いずれかの ロールが指定されたロールの権限を継承します。

指定するロールは、現在のプライマリロールまたはセカンダリロール(つまり、それぞれ CURRENT_ROLE または CURRENT_SECONDARY_ROLES によって返されるロール)、またはロール階層内の下位ロールになります。

FALSE

以下のいずれか:

  • 指定されたロールは、組織のユーザーグループにリンクされていないローカルロールです。

  • 指定されたロールは、現在のプライマリロールまたはセカンダリロールのロール階層の上位にあるか、またはロール階層にまったくありません。

NULL

データ共有コンシューマーアカウントでは、この関数は、マスキングポリシー条件などで共有オブジェクト(例: セキュア UDF またはセキュアビュー)を参照する場合に NULL を返します。この動作により、データ共有コンシューマーアカウントでロール階層が公開されなくなります。

使用上の注意

IS_ORGANIZATION_USER_GROUP_IN_SESSION 関数は IS_DATABASE_ROLE_IN_SESSIONIS_ROLE_IN_SESSION 関数に似ています。以下の使用上の注意は、これらすべてのコンテキスト関数に当てはまります。

  • 構文を1つ使用します。

  • 名前の構文:

    • 引数として渡すことができるロール名は1つだけです。

    • 引数は文字列で、Snowflakeにロールが格納されているのと同一の大文字と小文字を使用する必要があります。詳細については、 識別子の要件 をご参照ください。

  • 列の構文:

    • 引数として渡すことができる列は1つだけです。

    • 列には STRING データ型が必要です。

    • 列を次のいずれかとして指定します。

      • column_name

      • table_name.column_name

      • schema_name.table_name.column_name

      • database_name.schema_name.table_name.column_name

  • 仮想列:

    テーブルに格納されている計算値ではなく、式から計算された値の結果を含む仮想列はサポート されていません

    SELECT IS_ROLE_IN_SESSION(UPPER(authz_role)) FROM t1;
    
    Copy

    仮想列は、式に列名のエイリアスがある場合にのみサポートされます。

    CREATE VIEW v2 AS
    SELECT
      authz_role,
      UPPER(authz_role) AS upper_authz_role
    FROM t2;
    
    SELECT IS_ROLE_IN_SESSION(upper_authz_role) FROM v2;
    
    Copy
  • ポリシー:

    マスキングポリシー または 行アクセスポリシー でこれらの関数を使用する場合は、SnowflakeアカウントがEnterprise Edition以上であることを確認してください。

    ポリシー条件でロール階層と継承された権限を評価する必要がある場合、Snowflakeはこの関数を使用することをお勧めします。

  • 結果キャッシュ:

    この関数をマスキングポリシーまたは行アクセスポリシーで使用しており、ポリシーも、ポリシーによって保護されているテーブルや列も前のクエリから変更されていない場合は、 RESULT_SCAN 関数を使用して、保護されたテーブルに対するクエリの結果を返すことができます。結果キャッシュは、非リテラル構文を使用する場合にのみ適用されます。

  • マテリアライズドビュー定義ではこれらの関数を使用できません。関数が決定論的ではなく、Snowflakeは具体化するデータを決定できないためです。

以下の例では、 TRUE を返します。

  • ロール analyst は、組織のユーザーグループがアカウントに追加されたときに作成またはリンクされました。

  • analyst ロールに付与された権限は、セッションの現在のロールに継承されます。

SELECT IS_ORGANIZATION_USER_GROUP_IN_SESSION('ANALYST');
Copy