複数アカウントのユーザーを一括管理できる組織ユーザーを試してみた #SnowflakeDB

複数アカウントのユーザーを一括管理できる組織ユーザーを試してみた #SnowflakeDB

Clock Icon2025.06.10

はじめに

2025年5月のアップデートで、複数アカウントを持つ組織で、同一人物を複数のアカウントのユーザーとしてインポートできる「組織ユーザー」という機能がパブリックプレビューとなりました。こちらを試してみたので、本記事で内容をまとめてみます。

https://docs.snowflake.com/en/release-notes/2025/other/2025-05-29-org-users

アップデートの概要

Snowflake では一つの契約(組織)から複数のアカウントを作成できます。この際、通常アカウントとは別に「Organization Account」として組織全体の管理に使用できる特別な種類のアカウントを作成することができます。
組織アカウントについては以下の記事が参考になると思います。

https://dev.classmethod.jp/articles/snowflake-organization-account/

今回プレビューとなった「組織ユーザー」は上記の組織アカウントで作成することで、同一組織内の他通常アカウントにユーザーをインポートできます。

これまでは、複数アカウント運用時に同じユーザーが各アカウントにログインする場合、アカウントごとのユーザーを作成する必要がありましたが、組織ユーザーを使用することでユーザー管理を簡素化できます。

組織ユーザーと組織ユーザーグループ

組織でのユーザー管理には「組織ユーザー」と「組織ユーザーグループ」というオブジェクトを使用します。組織アカウントで GLOBALORGADMIN ロールを持つユーザーがこれらのオブジェクトを管理できます。それぞれ概要は以下の通りです。

  • 組織ユーザー
  • 組織ユーザーグループ
    • CREATE ORGANIZATION USER GROUP で作成
    • 組織ユーザーの論理的なグループ
    • 組織ユーザーを組織ユーザーグループに追加する
      • 組織ユーザーは複数の組織ユーザーグループに追加できる
    • 通常アカウントでは組織ユーザーグループ単位で一括でユーザーをインポートできる

上記より、組織ユーザーグループを通常アカウントにインポートすることとなります。この際の特徴は以下の通りです。

  • ユーザーグループのインポートと合わせて、組織ユーザーグループ名のアカウントロールがインポート先の通常アカウントに作成される
  • 通常アカウントでは、組織ユーザー名と同一の名称でユーザーオブジェクトが作成される
    • 組織ユーザーには上記の組織ユーザーグループ名からなるアカウントロールが紐づけられる

試してみる

組織アカウントの作成

通常アカウントで以下を実行し組織アカウントを作成しました。

USE ROLE ORGADMIN;

CREATE ORGANIZATION ACCOUNT myorgaccount
    ADMIN_NAME = admin
    ADMIN_PASSWORD = '<パスワード>'
    EMAIL = '<メールアドレス>'
    MUST_CHANGE_PASSWORD = true
    EDITION = enterprise;

https://docs.snowflake.com/ja/sql-reference/sql/create-organization-account

組織ユーザーの作成

組織アカウントのグローバル組織管理者として、複数の通常アカウントのユーザーとして登録したい人ごとに、組織ユーザーを作成します。

ここでは以下の通り2ユーザーを作成しました。

USE ROLE GLOBALORGADMIN;

CREATE ORGANIZATION USER orguser1
   EMAIL = '<メールアドレス>'
   LOGIN_NAME = 'orguser1';

CREATE ORGANIZATION USER orguser2
   EMAIL = '<メールアドレス>'
   LOGIN_NAME = 'orguser2';

この際、メールアドレスのみ必須のプロパティとなります。組織ユーザーで設定可能なプロパティは以下に記載があります。通常のユーザーよりも設定可能なパラメータは限定されます。

https://docs.snowflake.com/en/sql-reference/sql/create-organization-user

組織ユーザーグループの作成

続けて、組織ユーザーグループを作成し、各グループに所属する組織ユーザーを追加します。

--組織ユーザーグループを作成
CREATE ORGANIZATION USER GROUP data_engineers_group;
--組織ユーザーグループに組織ユーザーを追加
ALTER ORGANIZATION USER GROUP data_engineers_group
   ADD ORGANIZATION USERS orguser1, orguser2;

https://docs.snowflake.com/en/sql-reference/sql/create-organization-user-group

組織ユーザーグループを通常のアカウントで利用できるようにする

組織ユーザーグループを通常アカウントで使用(インポート)できるように設定します。

ALTER ORGANIZATION USER GROUP data_engineers_group
   SET VISIBILITY = ACCOUNTS <アカウント名>;

注意点として、アカウント識別子は使用できないと記載があります。また、組織名も不要でアカウント名をそのまま指定します。

https://docs.snowflake.com/en/sql-reference/sql/alter-organization-user-group

通常のアカウントでユーザーグループを表示

ここから通常アカウントでログインして管理者(ACCOUNTADMIN)として作業します。
上記で作成した組織ユーザーグループをこのアカウントで使用できる場合、以下のように表示されます。

USE ROLE ACCOUNTADMIN;

--アカウントで使用できる組織ユーザーグループを表示
>SHOW ORGANIZATION USER GROUPS;
+----------------------+-------------+-------------------------------+
| name                 | is_imported | created_on                    |
|----------------------+-------------+-------------------------------|
| DATA_ENGINEERS_GROUP | false       | 2025-06-09 17:34:39.687 -0700 |
+----------------------+-------------+-------------------------------+

ユーザーのインポート後の競合を解決する

組織ユーザーを通常のアカウントにインポートすると、ユーザーオブジェクト・アカウントロールが作成されます。そのため、通常アカウント側の既存オブジェクトと競合する可能性あり、この場合インポートできません。具体的には以下の点に注意します。

  • ユーザーのプロパティ
    • 組織ユーザーの以下のプロパティが既存アカウントと同じ場合、競合します
      • name
      • login_name
>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP  DATA_ENGINEERS_GROUP;
+----------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
| name     | created_on                    | is_imported | display_name | login_name | first_name | middle_name | last_name | email                          | comment | type   |
|----------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------|
| ORGUSER1 | 2025-06-09 17:27:24.303 -0700 | false       | NULL         | ORGUSER1   | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
| ORGUSER2 | 2025-06-09 17:29:33.653 -0700 | false       | NULL         | ORGUSER2   | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
+----------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
  • 組織ユーザーグループ名
    • 組織ユーザーグループをインポートすると、その名称からなるアカウントロールが作成されます
    • 以下の例の場合DATA_ENGINEERS_GROUPの名称でアカウントロールが作成されます
>SHOW ORGANIZATION USER GROUPS;
+----------------------+-------------+-------------------------------+
| name                 | is_imported | created_on                    |
|----------------------+-------------+-------------------------------|
| DATA_ENGINEERS_GROUP | false       | 2025-06-09 17:34:39.687 -0700 |
+----------------------+-------------+-------------------------------+

競合が発生する場合、通常アカウント側のオブジェクト名やプロパティを変更するか、オブジェクトをリンクすることで解決できます。詳細は後述します。

組織ユーザー グループを通常のアカウントにインポート

競合がない場合、以下のコマンドで組織ユーザーグループをインポートします。

/*通常アカウント側*/
ALTER ACCOUNT ADD ORGANIZATION USER GROUP data_stewards_group;

問題なければ、組織ユーザーグループ、組織ユーザーそれぞれについて確認した際 [is_imported] カラムがtrueとなります。

>SHOW ORGANIZATION USER GROUPS;
+----------------------+-------------+-------------------------------+
| name                 | is_imported | created_on                    |
|----------------------+-------------+-------------------------------|
| DATA_ENGINEERS_GROUP | true        | 2025-06-09 17:34:39.687 -0700 |
+----------------------+-------------+-------------------------------+

>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP  DATA_ENGINEERS_GROUP;
+----------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
| name     | created_on                    | is_imported | display_name | login_name | first_name | middle_name | last_name | email                          | comment | type   |
|----------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------|
| ORGUSER1 | 2025-06-09 17:27:24.303 -0700 | true        | NULL         | ORGUSER1   | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
| ORGUSER2 | 2025-06-09 17:29:33.653 -0700 | true        | NULL         | ORGUSER2   | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
+----------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+

通常アカウント側でオブジェクトが作成されます。

--ユーザー
>SHOW USERS LIKE 'ORG%';
+----------+-------------------------------+------------+--------------+------------+-----------+--------------------------------+----------------+----------------+---------+----------+----------------------+----------------+-------------------+-------------------+--------------+-------------------------+---------------+---------------+--------------------+--------------+--------------------+-----------------+-------------------+--------------+--------------------+------+---------+---------------------------+
| name     | created_on                    | login_name | display_name | first_name | last_name | email                          | mins_to_unlock | days_to_expiry | comment | disabled | must_change_password | snowflake_lock | default_warehouse | default_namespace | default_role | default_secondary_roles | ext_authn_duo | ext_authn_uid | mins_to_bypass_mfa | owner        | last_success_login | expires_at_time | locked_until_time | has_password | has_rsa_public_key | type | has_mfa | is_from_organization_user |
|----------+-------------------------------+------------+--------------+------------+-----------+--------------------------------+----------------+----------------+---------+----------+----------------------+----------------+-------------------+-------------------+--------------+-------------------------+---------------+---------------+--------------------+--------------+--------------------+-----------------+-------------------+--------------+--------------------+------+---------+---------------------------|
| ORGUSER1 | 2025-06-09 17:49:54.774 -0700 | ORGUSER1   | NULL         | NULL       | NULL      | <メールアドレス>                | NULL           | NULL           | NULL    | false    | false                | false          | NULL              | NULL              | NULL         | ["ALL"]                 | false         | NULL          | NULL               | ACCOUNTADMIN | NULL               | NULL            | NULL              | false        | false              | NULL | false   | true                      |
| ORGUSER2 | 2025-06-09 17:49:54.791 -0700 | ORGUSER2   | NULL         | NULL       | NULL      | <メールアドレス>                | NULL           | NULL           | NULL    | false    | false                | false          | NULL              | NULL              | NULL         | ["ALL"]                 | false         | NULL          | NULL               | ACCOUNTADMIN | NULL               | NULL            | NULL              | false        | false              | NULL | false   | true                      |
+----------+-------------------------------+------------+--------------+------------+-----------+--------------------------------+----------------+----------------+---------+----------+----------------------+----------------+-------------------+-------------------+--------------+-------------------------+---------------+---------------+--------------------+--------------+--------------------+-----------------+-------------------+--------------+--------------------+------+---------+---------------------------+

--ロール
>SHOW ROLES LIKE 'DATA%';
+-------------------------------+----------------------+------------+------------+--------------+-------------------+------------------+---------------+--------------+---------+
| created_on                    | name                 | is_default | is_current | is_inherited | assigned_to_users | granted_to_roles | granted_roles | owner        | comment |
|-------------------------------+----------------------+------------+------------+--------------+-------------------+------------------+---------------+--------------+---------|
| 2025-06-09 17:49:54.754 -0700 | DATA_ENGINEERS_GROUP | N          | N          | N            |                 2 |                0 |             0 | ACCOUNTADMIN |         |
+-------------------------------+----------------------+------------+------------+--------------+-------------------+------------------+---------------+--------------+---------+

プロパティの変更

インポート後、通常アカウント側でユーザーオブジェクトのプロパティを変更できます。この際、組織アカウント内の組織ユーザーに設定できるプロパティ除くすべてのプロパティを変更できます。

/*通常アカウント側*/

--組織アカウントで設定できるプロパティは変更できない
>ALTER USER orguser1 SET first_name = 'aa';
060157 (22023): Organization User properties cannot be locally modified: [FIRST_NAME].
--その他のプロパティは変更できる
>ALTER USER orguser1 SET default_warehouse = compute_wh;
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+

ユーザーのロールを確認すると、組織ユーザーグループ名のロールが紐づけられています。

>SHOW GRANTS TO USER orguser1;
+-------------------------------+-----------+------------+----------------------+----------------------+------------+--------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                 | role                 | granted_to | grantee_name | grant_option | granted_by   |
|-------------------------------+-----------+------------+----------------------+----------------------+------------+--------------+--------------+--------------|
| 2025-06-09 17:49:54.790 -0700 | USAGE     | ROLE       | DATA_ENGINEERS_GROUP | DATA_ENGINEERS_GROUP | USER       | ORGUSER1     | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+----------------------+----------------------+------------+--------------+--------------+--------------+

権限はありません。

>SHOW GRANTS TO ROLE data_engineers_group;
+------------+-----------+------------+------+------------+--------------+--------------+------------+
| created_on | privilege | granted_on | name | granted_to | grantee_name | grant_option | granted_by |
|------------+-----------+------------+------+------------+--------------+--------------+------------|
+------------+-----------+------------+------+------------+--------------+--------------+------------+

組織ユーザーグループ経由で作成したユーザーでログインしてみる

ユーザーインポート時点ではパスワードが設定されていないので、設定後問題なくログインできました。

/*通常アカウント側*/
ALTER USER orguser1 SET PASSWORD = '<パスワード>'

image

競合が発生する組織ユーザーグループの場合

続けて、競合が発生する際の手順を試してみます。先に通常アカウントで以下を実行しておき、このオブジェクトについて競合を発生させます。

/*通常アカウント側*/
USE ROLE USERADMIN;
CREATE ROLE data_stewards_group;
CREATE USER test DEFAULT_ROLE = public ;

組織アカウントで以下を実行します。

/*組織アカウント*/

--組織ユーザーを作成:ユーザー名とLOGIN_NAMEが競合
CREATE ORGANIZATION USER test
   EMAIL = '<メールアドレス>'
   LOGIN_NAME = 'test';

--組織ユーザーグループを作成:この名称で通常アカウント側でロールが作成される
CREATE ORGANIZATION USER GROUP data_stewards_group;

--組織ユーザーグループに組織ユーザーを追加
ALTER ORGANIZATION USER GROUP data_stewards_group
   ADD ORGANIZATION USERS test;

--組織ユーザーグループをアカウントで使用できるように設定
ALTER ORGANIZATION USER GROUP data_stewards_group
   SET VISIBILITY = ACCOUNTS <アカウント>;

通常のアカウントで組織ユーザーグループをインポートします。この場合、以下のようにエラーとなります。

/*通常アカウント側*/

>SHOW ORGANIZATION USER GROUPS;
+----------------------+-------------+-------------------------------+
| name                 | is_imported | created_on                    |
|----------------------+-------------+-------------------------------|
| DATA_ENGINEERS_GROUP | true        | 2025-06-09 17:34:39.687 -0700 |
| DATA_STEWARDS_GROUP  | false       | 2025-06-09 18:20:13.578 -0700 |
+----------------------+-------------+-------------------------------+

>ALTER ACCOUNT ADD ORGANIZATION USER GROUP DATA_STEWARDS_GROUP;
060163 (22023): Adding Organization User Group DATA_STEWARDS_GROUP failed: name conflict with existing role in the account.

ロール名の解決

ロールと組織ユーザーグループ間の競合は、ロールをグループにリンクすることで解決できます。これにより、アカウントロールは今後、組織ユーザーグループとして管理されます。ロールを組織ユーザーグループにリンクするには、SYSTEM$LINK_ORGANIZATION_USER_GROUP 関数を使用します。

/*通常アカウント側*/

>SELECT SYSTEM$LINK_ORGANIZATION_USER_GROUP('DATA_STEWARDS_GROUP');
+-----------------------------------------------------------------------------------------------------+
| SYSTEM$LINK_ORGANIZATION_USER_GROUP('DATA_STEWARDS_GROUP')                                          |
|-----------------------------------------------------------------------------------------------------|
| Successfully linked local role: DATA_STEWARDS_GROUP to organization user group: DATA_STEWARDS_GROUP |
+-----------------------------------------------------------------------------------------------------+

この状態で再度インポートすると問題なく実行できました。

/*通常アカウント側*/

>ALTER ACCOUNT ADD ORGANIZATION USER GROUP DATA_STEWARDS_GROUP;
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+

組織ユーザーと既存ユーザー間の競合の解決

上記で組織ユーザーグループをインポートできました。ただし、組織ユーザーを確認すると名称で競合しているため [is_imported ] がfalseのままとなっており、インポートされていません。

>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP  DATA_STEWARDS_GROUP;
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
| name | created_on                    | is_imported | display_name | login_name | first_name | middle_name | last_name | email                          | comment | type   |
|------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------|
| TEST | 2025-06-09 18:20:13.158 -0700 | false       | NULL         | TEST       | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
1 Row(s) produced. Time Elapsed: 0.123s

既存のユーザーオブジェクトが組織ユーザーと同じ人物に対応しており、今後そのユーザーを組織ユーザーとして管理したい場合は、既存のユーザーを組織ユーザーにリンクすることで競合を解決できます。このためには SYSTEM$LINK_ORGANIZATION_USER を使用します。

SYSTEM$LINK_ORGANIZATION_USER( '<local_user>', '<org_user>' )

この際、以下のエラーとなりました。

>SELECT SYSTEM$LINK_ORGANIZATION_USER( 'test', 'test' );
060168 (XX000): Local user TEST of type UNTYPED cannot be linked to an organization user.

通常アカウント側で TYPE を設定すると動作しました。

ALTER USER test SET TYPE = PERSON;

>SELECT SYSTEM$LINK_ORGANIZATION_USER( 'test', 'test' );
+-----------------------------------------------------------------+
| SYSTEM$LINK_ORGANIZATION_USER( 'TEST', 'TEST' )                 |
|-----------------------------------------------------------------|
| Successfully linked local user: TEST to organization user: TEST |
+-----------------------------------------------------------------+

その後、再度組織ユーザーを確認すると [is_imported] がtrueに更新されていました。

>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP  DATA_STEWARDS_GROUP;
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
| name | created_on                    | is_imported | display_name | login_name | first_name | middle_name | last_name | email                          | comment | type   |
|------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------|
| TEST | 2025-06-09 18:20:13.158 -0700 | true        | NULL         | TEST       | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+

ここでは通常アカウント側のロールやユーザーをリンクさせましたが、リンクしたくない場合は、通常アカウントのユーザーオブジェクトまたはそのプロパティの名前を変更することで競合を解決します。

単一の通常アカウントからユーザーを削除

通常アカウント側でアカウントから組織ユーザーグループを削除できます。
これにより、インポートされたすべてのユーザーが削除され、組織ユーザーグループのインポート時に作成されたロールも削除されます。
ここでは通常アカウント側で DATA_STEWARDS_GROUP を削除してみます。

/*通常アカウント側*/
--現在の組織ユーザーを確認
>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP DATA_STEWARDS_GROUP;
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
| name | created_on                    | is_imported | display_name | login_name | first_name | middle_name | last_name | email                          | comment | type   |
|------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------|
| TEST | 2025-06-09 18:20:13.158 -0700 | true        | NULL         | TEST       | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+

--アカウントから組織ユーザーグループを削除
ALTER ACCOUNT REMOVE ORGANIZATION USER GROUP DATA_STEWARDS_GROUP;

--現在の組織ユーザーを確認:[is_imported]はfalseになる
>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP DATA_STEWARDS_GROUP;
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+
| name | created_on                    | is_imported | display_name | login_name | first_name | middle_name | last_name | email                          | comment | type   |
|------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------|
| TEST | 2025-06-09 18:20:13.158 -0700 | false       | NULL         | TEST       | NULL       | NULL        | NULL      | <メールアドレス>                | NULL    | PERSON |
+------+-------------------------------+-------------+--------------+------------+------------+-------------+-----------+--------------------------------+---------+--------+

組織ユーザーグループが削除されたので、組織ユーザーグループ経由で作成されるユーザーやロールも削除されます。

/*通常アカウント側*/
--ユーザー
>SHOW USERS LIKE 'TEST';
+------+------------+------------+--------------+------------+-----------+-------+----------------+----------------+---------+----------+----------------------+----------------+-------------------+-------------------+--------------+-------------------------+---------------+---------------+--------------------+-------+--------------------+-----------------+-------------------+--------------+--------------------+------+---------+---------------------------+
| name | created_on | login_name | display_name | first_name | last_name | email | mins_to_unlock | days_to_expiry | comment | disabled | must_change_password | snowflake_lock | default_warehouse | default_namespace | default_role | default_secondary_roles | ext_authn_duo | ext_authn_uid | mins_to_bypass_mfa | owner | last_success_login | expires_at_time | locked_until_time | has_password | has_rsa_public_key | type | has_mfa | is_from_organization_user |
|------+------------+------------+--------------+------------+-----------+-------+----------------+----------------+---------+----------+----------------------+----------------+-------------------+-------------------+--------------+-------------------------+---------------+---------------+--------------------+-------+--------------------+-----------------+-------------------+--------------+--------------------+------+---------+---------------------------|
+------+------------+------------+--------------+------------+-----------+-------+----------------+----------------+---------+----------+----------------------+----------------+-------------------+-------------------+--------------+-------------------------+---------------+---------------+--------------------+-------+--------------------+-----------------+-------------------+--------------+--------------------+------+---------+---------------------------+
--ロール
SHOW ROLES LIKE 'DATA_STEWARDS_GROUP';

すべての通常アカウントからユーザーを削除する

複数のアカウントにインポートしている場合、すべての通常アカウントから一括でユーザーを削除することも可能です。この場合、組織アカウント側で作業します。

ここでは、DATA_ENGINEERS_GROUP ユーザーグループの ORGUSER2 ユーザーを削除します。

/*通常アカウント*/
>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP DATA_ENGINEERS_GROUP
	->> SELECT "name","is_imported" FROM $1;
+----------+-------------+
| name     | is_imported |
|----------+-------------|
| ORGUSER1 | true        |
| ORGUSER2 | true        |
+----------+-------------+

組織アカウントで組織ユーザー「ORGUSER2」を削除

/*組織アカウント*/
DROP ORGANIZATION USER orguser2;

通常アカウントで確認

/*通常アカウント*/
--組織アカウント側で削除した組織ユーザーは通常アカウント側からも見えなくなる
>SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP  DATA_ENGINEERS_GROUP
	->> SELECT "name","is_imported" FROM $1;
+----------+-------------+
| name     | is_imported |
|----------+-------------|
| ORGUSER1 | true        |
+----------+-------------+

--ユーザーを確認:orguser2も自動で削除されている
>SHOW USERS LIKE 'org%'
	->> SELECT "name" FROM $1;
+----------+
| name     |
|----------|
| ORGUSER1 |
+----------+

組織ユーザーと組織ユーザーグループのリンクを解除する

これまでの設定では、組織ユーザーグループを削除すると、各アカウントで作成されたユーザーやロールも削除されていました。
これは通常アカウント側のオブジェクトと組織ユーザーグループがリンクされているためです。

ユーザーオブジェクトをアカウントに保持しつつ、組織ユーザーとの関連付けを解除したい場合は、 SYSTEM$UNLINK_ORGANIZATION_USER 関数を使用して、各通常アカウント側のユーザーと組織ユーザーのリンクを解除します。

通常アカウントで以下を実行し、ここでは組織ユーザーのリンクを解除します。

/*通常アカウント側*/
>SELECT SYSTEM$UNLINK_ORGANIZATION_USER('orguser1');
+---------------------------------------------+
| SYSTEM$UNLINK_ORGANIZATION_USER('ORGUSER1') |
|---------------------------------------------|
| Successfully unlinked local user: ORGUSER1  |
+---------------------------------------------+

https://docs.snowflake.com/en/sql-reference/functions/system_unlink_organization_user

ロールについては、リンクを解除しないでおきます。

/*通常アカウント側*/
>SHOW ROLES LIKE 'DATA%';
+-------------------------------+----------------------+------------+------------+--------------+-------------------+------------------+---------------+--------------+---------+
| created_on                    | name                 | is_default | is_current | is_inherited | assigned_to_users | granted_to_roles | granted_roles | owner        | comment |
|-------------------------------+----------------------+------------+------------+--------------+-------------------+------------------+---------------+--------------+---------|
| 2025-06-09 17:49:54.754 -0700 | DATA_ENGINEERS_GROUP | N          | N          | N            |                 0 |                0 |             0 | ACCOUNTADMIN |         |
+-------------------------------+----------------------+------------+------------+--------------+-------------------+------------------+---------------+--------------+---------+

組織アカウントで以下を実行し、組織ユーザーグループを削除します。

/*組織アカウント*/
DROP ORGANIZATION USER GROUP data_engineers_group;

https://docs.snowflake.com/en/sql-reference/sql/drop-organization-user-group

通常アカウントでオブジェクトを確認します。リンクを解除したユーザー(ORGUSER1)は通常アカウント側に残ります。

--削除したdata_engineers_groupは表示されない
>SHOW ORGANIZATION USER GROUPS;
+---------------------+-------------+-------------------------------+
| name                | is_imported | created_on                    |
|---------------------+-------------+-------------------------------|
| DATA_STEWARDS_GROUP | false       | 2025-06-09 18:20:13.578 -0700 |
+---------------------+-------------+-------------------------------+

--ロールはリンクされていたので削除される
>SHOW ROLES LIKE 'DATA%';
+------------+------+------------+------------+--------------+-------------------+------------------+---------------+-------+---------+
| created_on | name | is_default | is_current | is_inherited | assigned_to_users | granted_to_roles | granted_roles | owner | comment |
|------------+------+------------+------------+--------------+-------------------+------------------+---------------+-------+---------|
+------------+------+------------+------------+--------------+-------------------+------------------+---------------+-------+---------+

--リンクを削除したユーザーは通常アカウント側に残る
>SHOW USERS LIKE 'org%'
	->> SELECT "name" FROM $1;
+----------+
| name     |
|----------|
| ORGUSER1 |
+----------+

さいごに

複数アカウントでユーザーを管理できる組織ユーザーを試してみました。
複数アカウントでの運用時にユーザーを一括管理できる機能です。組織ユーザーグループとしてユーザーを役割などの応じて論理的なグループとしてまとめることができる点も便利と思います。
こちらの内容が何かの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.