组织用户¶
拥有多个账户的组织通常需要让同一个人成为其中多个账户的用户。为避免重复为每个账户中的人员分别创建用户对象,组织管理员可以在 组织账户 中创建 组织用户。每个组织用户充当全局用户实体,账户管理员可以将其导入到普通账户,从而简化了让同一个人在多个账户中拥有用户对象这一过程。
账户管理员不会将组织用户直接添加到其普通账户。相反,他们会添加 组织用户组,即组织用户的逻辑分组。当账户管理员导入组织用户组时,其组织用户将被添加到该账户中。
备注
如果您想为已在一个或多个普通账户中拥有用户对象的人员创建组织用户,则需要在导入组织用户组后将组织用户与现有用户对象关联起来。有关更多信息,请参阅 导入用户后解决冲突。
开始使用¶
让组织用户进入一个或多个账户的基本工作流程如下:
作为组织账户中的全局组织管理员:
作为普通账户中的管理员:
有关此工作流程的端到端示例,请参阅 扩展示例。
创建组织用户¶
组织管理员使用用户对象的基本属性(例如登录名和电子邮件)创建组织用户。只需要一封电子邮件,但在导入用户后,无法在普通账户中设置这些基本属性。有关这些基本属性的列表,请参阅 CREATE ORGANIZATION USER。
例如,以下命令创建了组织用户:
USE ROLE GLOBALORGADMIN;
CREATE ORGANIZATION USER asmith
EMAIL = 'asmith@example.com'
LOGIN_NAME = 'asmith@example.com';
组织用户组¶
组织用户组 是组织用户的逻辑分组。组织管理员创建这些组织用户组,然后添加应属于每个组的组织用户。当账户管理员将组织用户组导入到账户时,该组中的所有组织用户都将成为普通账户中的用户对象。一个组织用户可以是多个组织用户组的成员。
当账户管理员将组织用户组导入到普通账户时,Snowflake 会创建一个同名的访问控制 角色。例如,如果将组织用户组命名为 data_stewards
,则将该组导入到普通账户会创建一个名为 data_stewards
的角色。从组织用户组导入的每个用户都被授予此角色。
普通账户中的管理员可以对访问控制进行精细调整,方法是授予和撤消已授予从组织用户组导入的每个用户的角色的权限。您还可以向新角色授予账户特定角色或向账户特定角色授予新角色。
您可以将同一个组织用户组导入到多个普通账户,以便在整个组织中实现一致的角色。每个普通账户都可以为角色分配账户特定的权限,但命名将保持一致。或者,您可以为每个账户创建一个单独的组织用户组,然后将特定账户中所需的组织用户添加到相应的组织用户组中。
如果管理员导入包含相同组织用户的多个组织用户组,则只会创建一个本地用户,并且该用户被授予所有组织用户组中的角色。
为普通账户的账户管理员准备组织用户组这一组织管理员任务分为三个步骤:
创建组织用户组¶
组织管理员执行 CREATE ORGANIZATION USER GROUP 命令,在组织账户中创建新的组织用户组。
例如,以下命令创建了一个组织用户组,该组织用户组表示数据工程师的逻辑分组。
CREATE ORGANIZATION USER GROUP data_engineers_group;
将组织用户添加到组织用户组¶
组织管理员创建组织用户组后,可以执行 ALTER ORGANIZATION USER GROUP 命令,将组织用户以逗号分隔的列表形式添加到该组中。例如,要将两个现有组织用户添加到组织用户组 data_engineers_group
,请执行以下操作:
ALTER ORGANIZATION USER GROUP data_engineers_group
ADD ORGANIZATION USERS asmith, sjohnson;
将组织用户组设置为可供普通账户使用¶
创建组织组后,您需要指定哪些普通账户可以查看和导入该组。在您使用 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;
在普通账户中导入用户¶
组织管理员创建了组织用户组后,普通账户中的管理员可以通过执行 ALTER ACCOUNT 命令来添加组织用户组,从而导入组织用户。只有当组织管理员 设置了组的可见性 以便普通账户可以访问该组时,这些管理员才能导入该组织用户组。
默认情况下,只有具有 ACCOUNTADMIN 角色的用户才能将组织用户组导入到普通账户。要允许其他用户导入组织组,请向他们授予 IMPORT ORGANIZATION USER GROUPS 权限。
将组织用户组导入到普通账户的语法如下所示:
ALTER ACCOUNT ADD ORGANIZATION USER GROUP <group_name>
有关导入组织用户组以添加用户的示例,请参阅 扩展示例。
导入用户后解决冲突¶
在普通账户中导入组织用户的账户管理员必须手动检查是否存在冲突。这些冲突可能发生在用户的属性或组织用户组的名称之间。
组织用户组和现有角色之间的冲突¶
当组织用户组的名称与普通账户中现有 角色 的名称相匹配时,就会发生冲突。在您解决冲突之前,不会导入组中的用户。
要检查导入组织用户组后是否存在冲突,请执行以下操作:
在
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
相匹配。
要检查导入组织用户组后是否存在用户冲突,请执行以下操作:
在
is_imported
列中,找出值为 FALSE 的行。该行中该用户至少有一个属性与现有用户的属性存在冲突。
小技巧
您可以使用 RESULT_SCAN 函数对 SHOW ORGANIZATION USERS 的输出进行后处理,并在 is_imported
列上进行筛选。例如,要搜索未成功从 marketing_team
组织用户组导入的组织用户,请执行以下操作:
SHOW ORGANIZATION USERS IN ORGANIZATION USER GROUP marketing_team;
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_imported" = 'false';
如果现有用户对象与组织用户对应同一个人,并且您希望今后以组织用户的身份管理该用户,则可以将现有用户与组织用户关联以解决冲突。调用 SYSTEM$LINK_ORGANIZATION_USER 函数将现有用户与组织用户关联起来。例如,要将现有用户 jloeb
与组织用户 jloebsmith
关联,请执行以下操作:
SELECT SYSTEM$LINK_ORGANIZATION_USER('jloeb', 'jloebsmith');
如果您不想将现有本地用户与新的组织用户关联,则可以在普通账户中重命名用户对象或其属性以解决冲突。例如,如果先前存在的用户和组织用户都有登录名 JOE_LOGIN
,则可以在普通账户中执行以下操作,以避免在不关联的情况下发生冲突:
USE ROLE ACCOUNTADMIN;
ALTER USER joe SET LOGIN_NAME = joe_login_renamed;
修改导入的用户¶
普通账户中的管理员可以在导入用户对象后使用 ALTER USER 命令修改用户对象的属性子集。管理员可以修改所有属性,除了 可以在组织账户中对组织用户设置的属性。有关只能在组织账户中设置的属性的列表,请参阅 CREATE ORGANIZATION USER。
删除组织用户和组¶
可以将组织用户和组织用户组 从单个账户中删除,也可以通过 在组织账户中将其删除 的方式从所有账户中删除。
从单个普通账户中删除用户¶
账户管理员可以执行 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 函数取消关联通过添加组织用户组而创建的角色。这样可以使角色的所有内容保持不变,但会取消其与组织用户组的关联。
扩展示例¶
- 组织管理员工作流程
以组织管理员的身份登录组织账户。
为两位数据管理员创建组织用户:
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,这表示没有冲突。