保護されていないビューでデータを共有する

共有するビューのクエリ最適化によるパフォーマンス向上を最大限に活用するために、非セキュアなビューを他のアカウントと共有できる共有を作成できます。

注釈

可能であれば、安全なビューを使用してデータのセキュリティを強化します。 セキュアオブジェクトを使用したデータアクセスの制御を使用する をご参照ください。

非セキュアなオブジェクトを許可するように明示的に設定された共有にのみ、非セキュアなビューを追加できます。非セキュアな関数など、他の非セキュアなオブジェクトを共有することはできません。 非セキュアなビューを共有することの制限 をご参照ください。

非セキュアなオブジェクトを許可する共有を作成する

非セキュアなビューを共有するには、非セキュアなオブジェクトを許可する共有を作成します。

たとえば、次を実行します。

CREATE OR REPLACE SHARE allow_non_secure_views
 SECURE_OBJECTS_ONLY=FALSE
 COMMENT="Share views that require query optimization";
Copy

注釈

完全な構文については、このトピックの セキュアでないビューを共有するための構文 をご参照ください。

ビューを共有できる共有を作成した後、 GRANT <権限> ... TO SHARE コマンドを使用して、共有にビューを付与します。例えば、 non_secure_view というビューを共有に付与するには、以下を実行します:

GRANT SELECT ON VIEW non_secure_view TO SHARE allow_non_secure_views;
Copy

あるいは、ビューの SELECT 権限をデータベースロールに付与し、そのデータベースロールを共有に付与することもできます。例えば、ビュー non_secure_view の SELECT 権限をデータベースロール performance_engineer に付与し、そのロールを共有に付与するには、以下を実行します:

GRANT SELECT ON VIEW non_secure_view TO DATABASE ROLE performance_engineer;
GRANT DATABASE ROLE performance_engineer TO SHARE allow_non_secure_views;
Copy

既存の共有を変換して、セキュアでないビューを共有できるようにする

セキュアなビューを持つ既存の共有を、セキュアでないビューの共有をサポートする共有に変換することができます。

例えば、既存の共有 secure_views_only を、非セキュアビューの共有をサポートするものに変換するには、以下のようにします:

  1. どのオブジェクトが共有に付与されているか、どのアカウントが共有にアクセスできるかは、それぞれ SHOW GRANTS コマンドを使って確認します:

    SHOW GRANTS TO SHARE secure_views_only;
    SHOW GRANTS OF SHARE secure_views_only;
    
    Copy
  2. 既存の共有を、ビューを共有できる共有に変換します:

    ALTER SHARE secure_views_only
     SET SECURE_OBJECTS_ONLY = FALSE,
     COMMENT = "Convert to allow sharing non-secure views that require
     query optimization";
    
    Copy
  3. オプションで、既存のセキュアビューをビューに変換します。この例では、 secure_view2 をセキュアでないビューに変更します:

    ALTER VIEW secure_view2 UNSET SECURE;
    
    Copy

詳細については、 共有内のセキュアビューを非セキュアビューに変換する をご参照ください。

共有内のセキュアビューを非セキュアビューに変換する

既存のセキュアビューをビューに変換したい場合は、共有にビューを付与する前でも後でも可能です。

共有内の既存のセキュアビューをビューに変換するには、以下が真でなければなりません:

例えば、 high_performance_view という名前の既存のセキュアビューに対して、 SECURE プロパティを設定解除します:

ALTER VIEW high_performance_view UNSET SECURE;
Copy

あるいは、セキュアビューをビューとして再作成することもできます:

CREATE OR REPLACE VIEW high_performance_view WITH COPY GRANTS;
Copy

非セキュアなビューを共有することの制限

ビューを共有する場合、以下のことを考慮すること:

  • SECURE_OBJECTS_ONLY プロパティが FALSE に設定された共有を作成した後は、このプロパティの設定を解除したり、このプロパティを TRUE に設定したりすることはできません。

  • 共有できるのは、セキュアでないビューのみです。関数のような非セキュアなオブジェクトは共有できません。

セキュアでないビューを共有するための構文

CREATE [ OR REPLACE ] SHARE <name>
[ SECURE_OBJECTS_ONLY = <boolean> ]
[ COMMENT = '<string_literal>' ]
Copy

必須パラメーター

name

共有の識別子を指定します。共有が作成されるアカウントに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません。例: "My object"。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

識別子の要件については、 識別子の要件 をご参照ください。

オプションのパラメーター

SECURE_OBJECTS_ONLY = boolean

セキュアなオブジェクトのみを許可するか、セキュアでないオブジェクトも共有を許可するかを指定します。

デフォルト: true

COMMENT = 'string_literal'

共有のコメントを指定します。

デフォルト: 値なし

アクセス制御の要件

この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

CREATE SHARE

アカウント

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

特にSnowflake Secure Data Sharingのアクセス制御要件の詳細については、 ACCOUNTADMIN 以外のロールによる、データ共有タスクの実行の有効化 をご参照ください。

使用上の注意

  • SHOW SHARES を実行しても、 SECURE_OBJECTS_ONLY プロパティの値を見ることはできません。COMMENT プロパティを使って、 SECURE_OBJECTS_ONLY プロパティの値に注意してください。

  • CREATE SHARE の従来の注意事項も適用されます。

非セキュアなビューを持つ共有の作成方法の例については、 非セキュアなオブジェクトを許可する共有を作成する をご参照ください。

ALTER SHARE を使った例については、 既存の共有を変換して、セキュアでないビューを共有できるようにする をご参照ください。