組織ユーザー¶
複数のアカウントを持つ組織では、同一人物を複数のアカウントのユーザーにする必要があることがよくあります。各アカウントの担当者のユーザーオブジェクトを個別に作成する繰り返しを避けるために、組織管理者は、 組織アカウント に 組織ユーザー を作成することができます。各組織ユーザーはグローバルユーザーエンティティとして機能します。アカウント管理者によって通常のアカウントにインポートすることができます。これにより、同一人物に複数のアカウントで1つのユーザーオブジェクトを持たせるプロセスを簡略化できます。
アカウント管理者は、組織ユーザーを通常のアカウントに直接追加することはできません。むしろ、組織ユーザーの論理的なグループである、 組織ユーザーグループ を追加します。アカウント管理者が組織ユーザーグループをインポートすると、その組織ユーザーがアカウントに追加されます。
注釈
1つまたは複数の通常アカウントにすでにユーザーオブジェクトを持っている人のために組織ユーザーを作成したい場合は、組織ユーザーグループをインポートした後、組織ユーザーを既存のユーザーオブジェクトにリンクする必要があります。詳細については、 ユーザーインポート後の競合の解決 をご参照ください。
始めましょう¶
組織ユーザーを1つ以上のアカウントに登録する基本的なワークフローは以下の通りです。
組織アカウントのグローバル組織管理者として:
複数の通常アカウントのユーザーにしたい人ごとに、 組織ユーザーを作成します。
ユーザーを論理的にグループ化した 組織ユーザーグループを作成します。
通常のアカウントのアカウント管理者が 組織ユーザーグループを利用できるようにします。
通常のアカウントの管理者として:
アカウントに 組織のユーザーグループをインポートします。
このワークフローのエンドツーエンドの例については、 拡張例 を参照してください。
組織ユーザーの作成¶
組織管理者は、ログイン名や電子メールなどのユーザーオブジェクトの基本的なプロパティを持つ組織ユーザーを作成します。メールだけが必要ですが、これらの基本的なプロパティは、ユーザーをインポートした後に通常のアカウントでセットすることはできません。これらの基本特性のリストについては、 CREATE ORGANIZATION USER を参照してください。
例として、次のコマンドで組織ユーザーを作成します。
USE ROLE GLOBALORGADMIN;
CREATE ORGANIZATION USER asmith
EMAIL = 'asmith@example.com'
LOGIN_NAME = 'asmith@example.com';
組織ユーザーグループ¶
組織ユーザーグループ は、組織ユーザーの論理的なグループです。組織管理者は、これらの組織ユーザーグループを作成し、各グループに属するべき組織ユーザーを追加します。アカウント管理者が組織ユーザーグループをアカウントにインポートすると、グループ内のすべての組織ユーザーが、通常のアカウントのユーザーオブジェクトになります。組織ユーザーは、複数の組織ユーザーグループのメンバーになることができます。
アカウント管理者が組織ユーザーグループを通常のアカウントにインポートすると、Snowflakeは同じ名前のアクセス制御 ロール を作成します。例えば、組織のユーザーグループの名前が data_stewards である場合、そのグループを通常のアカウントにインポートすると、 data_stewards という名前のロールが作成されます。組織のユーザーグループからインポートされた各ユーザーには、このロールが付与されます。
通常アカウントの管理者は、組織のユーザーグループからインポートされた各ユーザーに付与されたロールへの権限付与や取り消しを行うことで、アクセス制御を細かく調整することができます。また、アカウント固有のロールを新しいロールに付与したり、新しいロールをアカウント固有のロールに付与することもできます。
同じ組織のユーザーグループを複数の通常アカウントにインポートして、組織全体で一貫したロールを実装できます。各レギュラーアカウントはアカウント固有の権限をロールに割り当てることができますが、命名は統一されます。あるいは、アカウントごとに別の組織ユーザーグループを作成し、特定のアカウントで必要な組織ユーザーを適切な組織ユーザーグループに追加することもできます。
管理者が同じ組織ユーザーを含む複数の組織ユーザーグループをインポートする場合、ローカルユーザーは 1 つだけ作成され、このユーザーにはすべての組織ユーザーグループのロールが付与されます。
通常のアカウントのアカウント管理者のために組織ユーザーグループを準備する組織管理者のタスクは、3つのステップからなります。
グループの可視性をセットして、どの一般アカウントがアクセスできるかを指定します。
組織ユーザーグループの作成¶
組織管理者は、 CREATE ORGANIZATION USER GROUP コマンドを実行し、組織アカウントに新しい組織ユーザーグループを作成します。
例として、次のコマンドは、データエンジニアの論理的なグループを表す組織ユーザーグループを作成します。
CREATE ORGANIZATION USER GROUP data_engineers_group
IS_GRANTABLE = TRUE;
管理者が IS_GRANTABLE=TRUE を設定したので、アカウント管理者は、組織ユーザーグループから作成されたロールをローカルのアカウント固有のロールに付与できるようになります。そのパラメーターがないと、アカウント管理者は、組織ユーザーグループからインポートされたロールを通常のアカウントの別のロールに付与できません。
組織ユーザーを組織ユーザーグループに追加¶
組織管理者が組織ユーザーグループを作成した後、 ALTER ORGANIZATION USER GROUP コマンドを実行し、組織ユーザーをカンマ区切りのリストとしてグループに追加することができます。例えば、既存の2人の組織ユーザーを組織ユーザーグループ data_engineers_group に追加するには、次のように実行します。
ALTER ORGANIZATION USER GROUP data_engineers_group
ADD ORGANIZATION USERS asmith, sjohnson;
組織のユーザーグループを通常のアカウントで利用可能にします。¶
組織グループを作成したら、そのグループを表示およびインポートできる一般アカウントを指定する必要があります。アカウント管理者は、 ALTER ORGANIZATION USER GROUP コマンドを使用してグループの可視性をセットするまで、組織ユーザー グループを使用してユーザーをインポートすることはできません。すべての一般アカウントが組織ユーザーグループをインポートできるように指定することも、特定のアカウントにアクセスを制限することもできます。
次のコマンドは、アカウント qa_env に組織ユーザーグループを追加させるだけです。
ALTER ORGANIZATION USER GROUP data_engineers_group
SET VISIBILITY = ACCOUNTS qa_env;
注釈
組織管理者は、以前に可視化されていたアカウントから組織ユーザーグループを一方的に非表示にすることはできません。通常のアカウントの管理者は、組織管理者が可視性を変更できるようになる前に、ALTER ACCOUNT REMOVE ORGANIZATION USER GROUPコマンドを実行して、アカウントから組織ユーザーグループを削除する必要があります。
通常のアカウントでユーザーをインポート¶
組織管理者が組織ユーザーグループを作成した後、一般アカウントの管理者は、 ALTER ACCOUNT コマンドを実行して組織ユーザーグループを追加することで、組織ユーザーをインポートすることができます。これらの管理者が組織ユーザーグループをインポートできるのは、組織管理者が グループの可視性をセットして、通常のアカウントがアクセスできる場合のみです。
既定の設定では、 ACCOUNTADMIN ロールを持つユーザーだけが、組織のユーザーグループを通常のアカウントにインポートできます。他のユーザーに組織グループのインポートを許可するには、 IMPORT ORGANIZATION USER GROUPS 権限を付与します。
組織ユーザーグループを通常のアカウントにインポートする構文は以下のとおりです。
ALTER ACCOUNT ADD ORGANIZATION USER GROUP <group_name>
組織ユーザーグループをインポートしてユーザーを追加する例については、 拡張例 を参照してください。
ユーザーインポート後の競合の解決¶
通常のアカウントで組織ユーザーをインポートするアカウント管理者は、コンフリクトを手動でチェックする必要があります。このようなコンフリクトは、ユーザーのプロパティまたは組織のユーザーグループの名前の間で発生する可能性があります。
組織のユーザーグループと既存のロールの競合¶
コンフリクトは、組織ユーザーグループの名前が、通常のアカウントに存在する ロール の名前と一致する場合に発生します。競合を解決するまで、グループ内のユーザーはインポートされません。
組織ユーザーグループのインポート後に競合があるかどうかを確認するには、次の手順を実行します。
SHOW ORGANIZATION USER GROUPS コマンドを実行します。
is_imported列で、値が TRUE かどうかをチェックします。値が FALSE の場合、組織ユーザーグループは正常にインポートされませんでした。
ロールをグループにリンクすることで、ロールと組織ユーザーグループの競合を解決できます。ロールをリンクすることで、今後組織のユーザーグループとして管理することができます。競合するロールをリンクすると、それ以上アクションを行わなくても、組織のユーザーグループがアカウントに追加されます。SYSTEM$LINK_ORGANIZATION_USER_GROUP 関数を呼び出して、ロールを組織のユーザーグループにリンクします。
例えば、組織ユーザーグループ marketing_team をアカウントにインポートする前に、 marketing_team というロールがアカウントに存在していたとします。ロールを組織のユーザーグループにリンクし、グループのインポート処理を完了するには、以下を実行します。
SELECT SYSTEM$LINK_ORGANIZATION_USER_GROUP('marketing_team');
組織ユーザーと既存ユーザーの競合¶
コンフリクトは以下のいずれかに当てはまる場合に発生します。
組織ユーザーの
nameプロパティは、通常アカウントの既存ユーザーのnameと一致します。組織ユーザーの
login_nameプロパティは、通常アカウントの既存ユーザーのlogin_nameと一致します。
組織ユーザーグループのインポート後に、ユーザーの競合があるかどうかを確認するには、次の手順を実行します。
コマンド SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP を実行します。
is_imported列で、値が FALSE の行を検索します。その行のユーザーの少なくとも 1 つのプロパティが、既存のユーザーのプロパティと競合しています。
Tip
:doc:` パイプ演算子 </sql-reference/operators-flow>`(->>)を使用して、SHOW ORGANIZATION USERS の出力を後処理し、 is_imported 列をフィルタリングすることができます。たとえば、 marketing_team 組織ユーザーグループから正常にインポートされなかった組織ユーザーを検索する場合、次のクエリを実行します。
SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP marketing_team
->> SELECT * FROM $1 WHERE "is_imported" = 'false';
組織ユーザーと既存のユーザーの競合を解決するには、次の戦略のいずれかを使用します。
既存のユーザーをリンク:既存のユーザーオブジェクトが組織ユーザーと同じ人に対応し、そのユーザーを組織ユーザーとして今後管理する場合は、既存のユーザーと組織ユーザーをリンクして競合を解決できます。SYSTEM$LINK_ORGANIZATION_USER 関数を呼び出して、既存のユーザーと組織ユーザーをリンクします。たとえば、既存のユーザー
jloebを組織ユーザーjloebsmithとリンクするには、次のように関数を呼び出します。SELECT SYSTEM$LINK_ORGANIZATION_USER('jloeb', 'jloebsmith');
既存のユーザーを削除:ローカルユーザーを組織ユーザーに完全に置き換える場合は、 DROP USER コマンドを実行し、ローカルユーザーを削除します。ローカルオブジェクトがドロップされると、Snowflakeは自動的に組織ユーザーに対応する新しいユーザーオブジェクトを追加します。
既存のユーザーの名前またはそのプロパティの名前を変更:既存のローカルユーザーを組織ユーザーとリンクしたくないが、既存のユーザーをドロップするのではなく保持したい場合は、競合を解決するために通常のアカウントにあるユーザーオブジェクトまたはそのプロパティの名前を変更します。ローカルオブジェクトの名前が変更されると、Snowflakeは組織ユーザーに対応する新しいユーザーオブジェクトを自動的に追加します。例えば、既存のユーザーと組織ユーザーの両方がログイン名
JOE_LOGINを持っている場合、通常のアカウントで次を実行して、競合を回避できます。USE ROLE ACCOUNTADMIN; ALTER USER joe SET LOGIN_NAME = joe_login_renamed;
インポートしたユーザーの変更¶
通常のアカウントの管理者は、 ALTER USER コマンドを使用して、インポート後のユーザー オブジェクトのプロパティのサブセットを変更することができます。管理者は、組織アカウントで組織ユーザーにセットできるプロパティ を除く すべてのプロパティを変更できます。組織アカウントでのみセットできるプロパティのリストについては、 CREATE ORGANIZATION USER を参照してください。
ユーザーおよびロールがインポートされたかどうかのテスト¶
通常のアカウントの管理者は SYS_CONTEXT 関数を使用して、組織ユーザーグループがアカウントにインポートされたときに、ローカルユーザーとロールが作成されたかどうかを判断できます。
ローカルユーザー joe が組織ユーザーにリンクされているかどうかを判断するには、次のコマンドを実行します。
SELECT SYS_CONTEXT('SNOWFLAKE$ORGANIZATION', 'IS_USER_IMPORTED', 'joe');
ロール analysts がインポートされた組織ユーザーグループに対応するかどうかを確認するには、次のコマンドを実行します。
SELECT SYS_CONTEXT('SNOWFLAKE$ORGANIZATION', 'IS_GROUP_IMPORTED', 'analysts');
組織ユーザーとグループの削除¶
組織ユーザーおよび組織ユーザーグループは、 1つのアカウントから削除する ことができます。または、 組織アカウントでドロップする ことにより、すべてのアカウントから削除することができます。
単一の通常アカウントからのユーザーの削除¶
アカウント管理者は、 ALTER ACCOUNT コマンドを実行して、アカウントから組織ユーザーグループを削除することができます。組織ユーザーグループを削除すると、インポートされたすべてのユーザーが削除され、組織ユーザーグループがインポートされたときに作成されたロールが削除されます。このコマンドは、他の通常アカウントの組織ユーザーや組織ユーザーグループ、組織アカウントには影響しません。
注釈
組織ユーザーは、複数の組織ユーザーグループのメンバーになることができます。ユーザーが複数の組織グループからインポートされた場合、通常のアカウントからいずれかのグループを削除しても、ユーザーは削除されません。組織のユーザーグループがすべて削除されるまで、ユーザーは削除されません。
たとえば、次のコマンドは、 data_stewards グループからインポートされたユーザーをすべて削除し、 data_stewards ロールを削除します。
ALTER ACCOUNT REMOVE ORGANIZATION USER GROUP data_stewards;
すべてのレギュラーアカウントからユーザーを削除¶
組織ユーザーを組織アカウントから削除すると、そのユーザーをインポートしたすべての通常アカウントから、対応するユーザーオブジェクトが削除されます。組織ユーザーを削除するには、組織アカウントで DROP ORGANIZATION USER コマンドを実行します。
組織アカウントで組織ユーザーグループが削除された場合、組織ユーザーへの影響は、通常アカウントのユーザーが、アカウントにインポートされた他の組織ユーザーグループに属しているかどうかに依存します。組織ユーザーが、インポートされた別の組織ユーザーグループに属している場合、そのユーザーはアカウントから削除されません。そうでない場合、組織のユーザーグループを削除すると、グループからインポートされたすべてのユーザーが削除されます。
組織ユーザーグループを削除すると、グループのインポート時に作成されたロールも削除されます。
組織ユーザーグループを削除するには、組織アカウントで DROP ORGANIZATION USER GROUP コマンドを実行します。
組織ユーザーと組織ユーザーグループのリンク解除¶
組織ユーザーが通常のアカウントに正常にインポートされると、ローカルユーザーオブジェクトが組織ユーザーにリンクされます。 アカウントにユーザーオブジェクトを保持したいが、組織ユーザーとの関連付けは不要と判断した場合、 SYSTEM$UNLINK_ORGANIZATION_USER 関数を使用して、組織ユーザーからローカルユーザーのリンクを解除することができます。ユーザーのプロパティはすべて保持され、今後はローカルユーザーとして管理できます。
同様に、 SYSTEM$UNLINK_ORGANIZATION_USER_GROUP 関数を使用して、組織ユーザーグループの追加によって作成されたロールのリンクを解除します。これは、ロールのすべてを同じに保ちますが、組織ユーザーグループからのリンクが解除されます。組織ユーザーグループのインポート時に追加されたローカルユーザーオブジェクトもリンク解除され、今後はローカルユーザーとして管理されます。
拡張例¶
- 組織管理者のワークフロー
組織管理者として、組織アカウントにサインインします。
データスチュワードである2人の組織ユーザーを作成します。
USE ROLE GLOBALORGADMIN; CREATE ORGANIZATION USER joe_kelley EMAIL = 'jkelley@example.com' LOGIN_NAME = 'jkelley@example.com'; CREATE ORGANIZATION USER grace_vivian EMAIL = 'gvivian@example.com' LOGIN_NAME = 'gvivian@example.com';
データスチュワードの論理的なグループを表す組織ユーザーグループを作成します。
CREATE ORGANIZATION USER GROUP data_stewards_group;
組織ユーザーを新しい組織ユーザーグループに追加します。
ALTER ORGANIZATION USER GROUP data_stewards_group ADD ORGANIZATION USERS joe_kelley, grace_vivian;
組織ユーザーグループをインポートするために、すべての通常のアカウントを許可します。
ALTER ORGANIZATION USER GROUP data_stewards_group SET VISIBILITY = ALL;
- アカウント管理者のワークフロー
アカウント管理者として、組織ユーザーをインポートする通常のアカウントにサインインします。
アカウントにインポートできる組織ユーザーグループのリスト。
USE ROLE ACCOUNTADMIN; SHOW ORGANIZATION USER GROUPS;
組織のユーザーグループをアカウントにインポートします。
ALTER ACCOUNT ADD ORGANIZATION USER GROUP data_stewards_group;
組織のユーザーグループと既存のロールの競合をチェックします。
SHOW ORGANIZATION USER GROUPS;
is_imported列の値が「TRUE」であることを確認してください。これはコンフリクトがなかったことを示します。アカウントに追加されたユーザーをリストアップし、競合をチェックします。
SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP data_stewards_group;
すべての組織ユーザーの
is_imported列の値が TRUE であることを確認してください。
制限と考慮事項¶
組織ユーザーが通常のアカウントに追加された後、他のユーザーと同じようにユーザーの認証方法を設定します。組織レベルで認証を設定することはできません。