组织用户

拥有多个账户的组织通常需要让同一个人成为其中多个账户的用户。为避免重复为每个账户中的人员分别创建用户对象,组织管理员可以在 组织账户 中创建 组织用户。每个组织用户充当全局用户实体,账户管理员可以将其导入到普通账户,从而简化了让同一个人在多个账户中拥有用户对象这一过程。

账户管理员不会将组织用户直接添加到其普通账户。相反,他们会添加 组织用户组,即组织用户的逻辑分组。当账户管理员导入组织用户组时,其组织用户将被添加到该账户中。

备注

如果您想为已在一个或多个普通账户中拥有用户对象的人员创建组织用户,则需要在导入组织用户组后将组织用户与现有用户对象关联起来。有关更多信息,请参阅 导入用户后解决冲突

开始使用

让组织用户进入一个或多个账户的基本工作流程如下:

  1. 作为组织账户中的全局组织管理员:

    1. 在多个普通账户中,为您希望其成为用户的每个人 创建组织用户

    2. 创建组织用户组,即用户的逻辑分组。

    3. 将组织用户添加到组织用户组

    4. 使组织用户组适用 于普通账户中的账户管理员。

  2. 作为普通账户中的管理员:

    1. 将组织用户组导入 到账户。

    2. 检查并解决任何冲突

有关此工作流程的端到端示例,请参阅 扩展示例

创建组织用户

组织管理员使用用户对象的基本属性(例如登录名和电子邮件)创建组织用户。只需要一封电子邮件,但在导入用户后,无法在普通账户中设置这些基本属性。有关这些基本属性的列表,请参阅 CREATE ORGANIZATION USER

例如,以下命令创建了组织用户:

USE ROLE GLOBALORGADMIN;

CREATE ORGANIZATION USER asmith
   EMAIL = 'asmith@example.com'
   LOGIN_NAME = 'asmith@example.com';
Copy

组织用户组

组织用户组 是组织用户的逻辑分组。组织管理员创建这些组织用户组,然后添加应属于每个组的组织用户。当账户管理员将组织用户组导入到账户时,该组中的所有组织用户都将成为普通账户中的用户对象。一个组织用户可以是多个组织用户组的成员。

当账户管理员将组织用户组导入到普通账户时,Snowflake 会创建一个同名的访问控制 角色。例如,如果将组织用户组命名为 data_stewards,则将该组导入到普通账户会创建一个名为 data_stewards 的角色。从组织用户组导入的每个用户都被授予此角色。

普通账户中的管理员可以对访问控制进行精细调整,方法是授予和撤消已授予从组织用户组导入的每个用户的角色的权限。您还可以向新角色授予账户特定角色或向账户特定角色授予新角色。

您可以将同一个组织用户组导入到多个普通账户,以便在整个组织中实现一致的角色。每个普通账户都可以为角色分配账户特定的权限,但命名将保持一致。或者,您可以为每个账户创建一个单独的组织用户组,然后将特定账户中所需的组织用户添加到相应的组织用户组中。

如果管理员导入包含相同组织用户的多个组织用户组,则只会创建一个本地用户,并且该用户被授予所有组织用户组中的角色。

为普通账户的账户管理员准备组织用户组这一组织管理员任务分为三个步骤:

  1. 创建组织用户组

  2. 将组织用户添加到组

  3. 设置组的可见性,以指定哪些普通账户可以访问该组。

创建组织用户组

组织管理员执行 CREATE ORGANIZATION USER GROUP 命令,在组织账户中创建新的组织用户组。

例如,以下命令创建了一个组织用户组,该组织用户组表示数据工程师的逻辑分组。

CREATE ORGANIZATION USER GROUP data_engineers_group
 IS_GRANTABLE = TRUE;
Copy

因为管理员设置了 IS_GRANTABLE=TRUE 后,账户管理员将能够将从组织用户组创建的角色授予本地账户特定角色。如果缺少该参数,账户管理员无法将从组织用户组导入的角色授予常规账户中的其他角色。

将组织用户添加到组织用户组

组织管理员创建组织用户组后,可以执行 ALTER ORGANIZATION USER GROUP 命令,将组织用户以逗号分隔的列表形式添加到该组中。例如,要将两个现有组织用户添加到组织用户组 data_engineers_group,请执行以下操作:

ALTER ORGANIZATION USER GROUP data_engineers_group
   ADD ORGANIZATION USERS asmith, sjohnson;
Copy

将组织用户组设置为可供普通账户使用

创建组织组后,您需要指定哪些普通账户可以查看和导入该组。在您使用 ALTER ORGANIZATION USER GROUP 命令设置组的可见性之前,账户管理员无法使用组织用户组导入用户。您可以指定所有普通账户都可以导入组织用户组,也可以限制对特定账户的访问权限。

重要

执行 ALTER ORGANIZATION USER GROUP 命令以设置可见性,这会覆盖之前的可见性设置。例如,如果将可见性设置为 ALL,然后执行 ALTER 命令将可见性设置为 account_a,则从组织用户组创建的用户和角色将从所有账户(account_a 除外)中删除。

以下命令仅允许账户 qa_env 添加组织用户组:

ALTER ORGANIZATION USER GROUP data_engineers_group
   SET VISIBILITY = ACCOUNTS qa_env;
Copy

在普通账户中导入用户

组织管理员创建了组织用户组后,普通账户中的管理员可以通过执行 ALTER ACCOUNT 命令来添加组织用户组,从而导入组织用户。只有当组织管理员 设置了组的可见性 以便普通账户可以访问该组时,这些管理员才能导入该组织用户组。

默认情况下,只有具有 ACCOUNTADMIN 角色的用户才能将组织用户组导入到普通账户。要允许其他用户导入组织组,请向他们授予 IMPORT ORGANIZATION USER GROUPS 权限。

将组织用户组导入到普通账户的语法如下所示:

ALTER ACCOUNT ADD ORGANIZATION USER GROUP <group_name>
Copy

有关导入组织用户组以添加用户的示例,请参阅 扩展示例

导入用户后解决冲突

在普通账户中导入组织用户的账户管理员必须手动检查是否存在冲突。这些冲突可能发生在用户的属性或组织用户组的名称之间。

组织用户组和现有角色之间的冲突

当组织用户组的名称与普通账户中现有 角色 的名称相匹配时,就会发生冲突。在您解决冲突之前,不会导入组中的用户。

要检查导入组织用户组后是否存在冲突,请执行以下操作:

  1. 执行 SHOW ORGANIZATION USER GROUPS 命令。

  2. is_imported 列中,检查值是否为 TRUE。如果值为 FALSE,则未成功导入组织用户组,这可能表明存在冲突。

您可以通过将角色与组关联来解决角色与组织用户组之间的冲突。关联角色后,今后可将其作为组织用户组进行管理。关联冲突角色后,无需进一步操作即可将组织用户组添加到该账户。调用 SYSTEM$LINK_ORGANIZATION_USER_GROUP 函数将角色与组织用户组关联起来。

例如,在将组织用户组 marketing_team 导入到账户之前,假设角色 marketing_team 已存在于账户中。要将角色关联到组织用户组并完成导入群组的过程,请执行以下操作:

SELECT SYSTEM$LINK_ORGANIZATION_USER_GROUP('marketing_team');
Copy

组织用户和现有用户之间的冲突

当满足以下任一条件时,就会发生冲突:

  • 组织用户的 name 属性与普通账户中现有用户的 name 相匹配。

  • 组织用户的 login_name 属性与普通账户中现有用户的 login_name 相匹配。

要检查导入组织用户组后是否存在用户冲突,请执行以下操作:

  1. 执行 SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP 命令。

  2. is_imported 列中,找出值为 FALSE 的行。该行中该用户至少有一个属性与现有用户的属性存在冲突。

小技巧

您可以使用 竖线操作符 (->>) 对 SHOW ORGANIZATION USERS 的输出进行后处理,并根据 is_imported 列进行筛选。例如,要查找未从 marketing_team 组织用户组成功导入的组织用户,请运行以下查询:

SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP marketing_team
  ->> SELECT * FROM $1 WHERE "is_imported" = 'false';
Copy

Use one of the following strategies to resolve a conflict between an organization user and an existing user:

  • Link the existing user: If an existing user object corresponds to the same person as an organization user, and you want to manage the user as an organization user going forward, you can link the existing user with the organization user to resolve the conflict. Call the SYSTEM$LINK_ORGANIZATION_USER function to link an existing user with an organization user. For example, to link the existing user jloeb with the organization user jloebsmith, call the function as follows:

    SELECT SYSTEM$LINK_ORGANIZATION_USER('jloeb', 'jloebsmith');
    
    Copy
  • 删除现有用户:如果您希望组织用户完全替换本地用户,请运行 DROP USER 命令来删除该本地用户。删除本地对象后,Snowflake 会自动添加与该组织用户相对应的新用户对象。

  • Rename the existing user or its properties: If you don't want to link the existing local user with an organization user, but you want to preserve the existing user instead of dropping it, you can rename the user object or its properties in the regular account to resolve the conflict. After the local object is renamed, Snowflake automatically adds the new user object that corresponds to the organization user. For example, if the pre-existing user and the organization user both have the login name JOE_LOGIN, you could execute the following in the regular account to avoid the conflict:

    USE ROLE ACCOUNTADMIN;
    ALTER USER joe SET LOGIN_NAME = joe_login_renamed;
    
    Copy

修改导入的用户

普通账户中的管理员可以在导入用户对象后使用 ALTER USER 命令修改用户对象的属性子集。管理员可以修改所有属性,除了 可以在组织账户中对组织用户设置的属性。有关只能在组织账户中设置的属性的列表,请参阅 CREATE ORGANIZATION USER

删除组织用户和组

可以将组织用户和组织用户组 从单个账户中删除,也可以通过 在组织账户中将其删除 的方式从所有账户中删除。

从单个普通账户中删除用户

账户管理员可以执行 ALTER ACCOUNT 命令,将组织用户组从账户中删除。删除组织用户组会删除所有已导入的用户,并会删除导入组织用户组时创建的角色。此命令不会影响其他普通账户中的组织用户和组织用户组,也不会影响组织账户中的组织用户和组织用户组。

备注

一个组织用户可以是多个组织用户组的成员。如果是从多个组织组导入的用户,则从普通账户中删除其中一个组不会导致删除该用户。只有删除所有组织用户组后,才会删除该用户。

例如,以下命令会删除从 data_stewards 组导入的所有用户并会删除 data_stewards 角色:

ALTER ACCOUNT REMOVE ORGANIZATION USER GROUP data_stewards;
Copy

从所有普通账户中删除用户

在组织账户中删除组织用户时,相应的用户对象将从导入该用户的每个普通账户中删除。要删除组织用户,请在组织账户中执行 DROP ORGANIZATION USER 命令。

在组织账户中删除组织用户组时,对组织用户的影响取决于普通账户中的用户是否属于也已导入到该账户的其他组织用户组。如果组织用户属于已导入的其他组织用户组,则不会将该用户从该账户中删除。否则,删除组织用户组将删除从该组导入的所有用户。

删除组织用户组还会删除导入该组时创建的角色。

要删除组织用户组,请在组织账户中执行 DROP ORGANIZATION USER GROUP 命令。

取消关联组织用户和组织用户组

成功将组织用户导入到普通账户后,本地用户对象将与该组织用户关联。 如果您决定要将用户对象保留在账户中,但不再希望它与组织用户关联,则可以使用 SYSTEM$UNLINK_ORGANIZATION_USER 函数取消关联本地用户与组织用户。用户的所有属性都被保留,以后可以作为本地用户进行管理。

Similarly, you can use the SYSTEM$UNLINK_ORGANIZATION_USER_GROUP function to unlink a role that was created by adding an organization user group. This keeps everything about the role the same, but unlinks it from the organization user group. Local user objects that were added when the organization user group was imported are also unlinked, and are managed as local users going forward.

扩展示例

组织管理员工作流程
  1. 以组织管理员的身份登录组织账户。

  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';
    
    Copy
  3. 创建代表数据管理员逻辑分组的组织用户组。

    CREATE ORGANIZATION USER GROUP data_stewards_group;
    
    Copy
  4. 将组织用户添加到新的组织用户组。

    ALTER ORGANIZATION USER GROUP data_stewards_group
       ADD ORGANIZATION USERS joe_kelley, grace_vivian;
    
    Copy
  5. 允许所有普通账户导入组织用户组。

    ALTER ORGANIZATION USER GROUP data_stewards_group
       SET VISIBILITY = ALL;
    
    Copy
账户管理员工作流程
  1. 以账户管理员的身份登录要导入组织用户的普通账户。

  2. 列出可以导入到该账户的组织用户组。

    USE ROLE ACCOUNTADMIN;
    
    SHOW ORGANIZATION USER GROUPS;
    
    Copy
  3. 将组织用户组导入到账户。

    ALTER ACCOUNT
      ADD ORGANIZATION USER GROUP data_stewards_group;
    
    Copy
  4. 检查组织用户组和现有角色之间是否存在冲突:

    SHOW ORGANIZATION USER GROUPS;
    
    Copy

    确保 is_imported 列的值为 TRUE,这表示没有冲突。

  5. 列出已添加到账户的用户并检查是否存在冲突:

    SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP data_stewards_group;
    
    Copy

    确保所有组织用户的 is_imported 列的值为 TRUE,这表示没有冲突。

语言: 中文