用户管理¶
用户管理员可以通过 SQL 或 Web 界面创建和管理 Snowflake 用户:
使用 SQL,管理员可以执行所有与用户相关的任务,包括更改用户的登录凭据和默认值。
Snowsight 支持大多数与用户相关的任务。
用户类型¶
有些用户对象对应的是人类用户,而其他用户对象则对应的是以编程方式与 Snowflake 交互(而无需人类交互)的服务或应用程序。创建用户对象时,指定用户类型以区分人类和服务。这种区别很重要,因为人类用户应注册 多重身份验证 (MFA),但服务和应用程序不应注册,因为没有人使用辅助身份验证方法。
用户对象的 TYPE 属性决定了用户类型。此 TYPE 属性的可能值如下:
- PERSON:
用户是可以与 Snowflake 交互的人类用户。
- NULL:
Functions the same as
PERSON.- SERVICE:
用户是与 Snowflake 交互(而无需人类交互)的服务或应用程序。
为改善非交互式用例的安全态势,将
TYPE属性设置为SERVICE的用户具有以下特性:他们无法使用密码登录。
他们无法使用 SAML SSO 登录。
他们不能 注册 MFA。
它们不受身份验证策略 MFA 强制执行的约束。
它们不能具有以下属性:
FIRST_NAMEMIDDLE_NAMELAST_NAMEPASSWORDMUST_CHANGE_PASSWORDMINS_TO_BYPASS_MFA
不能使用以下命令:
ALTER USER RESET PASSWORD
ALTER USER SET
DISABLE_MFA = TRUE
- SNOWFLAKE_SERVICE:
User that is created by Snowflake for Snowpark Container Services. Administrators cannot create users of type SNOWFLAKE_SERVICE, nor can they change the type of an existing user to be SNOWFLAKE_SERVICE. For more information about SNOWFLAKE_SERVICE users, see Snowpark Container Services:SQL 执行.
- LEGACY_SERVICE:
TYPE属性设置为LEGACY_SERVICE的用户表示非交互式集成。与SERVICE类似,但允许密码和 SAML 身份验证。在未来的版本中,LEGACY_SERVICE 类型将会弃用,届时所有非交互式用例将使用具有安全身份验证方法的 SERVICE 类型。LEGACY_SERVICE用户具有以下特征:他们可以使用密码或 SAML 身份验证登录,与
SERVICE用户不同。他们具有
SERVICE用户的属性,但具有可用的PASSWORD和MUST_CHANGE_PASSWORD属性。他们具有
SERVICE用户的命令限制,但可以使用 ALTER USER RESET PASSWORD 命令。他们不受身份验证策略多重身份验证 (MFA) 强制执行的影响。此属性允许管理员设置账户级身份验证,该策略需要使用 MFA 进行密码身份验证,而无需设置用户级身份验证策略来防止
LEGACY_SERVICE用户需要 MFA 进行密码身份验证。
用户角色¶
Snowflake 使用角色来控制用户可以访问的对象(虚拟仓库、数据库、表等):
Snowflake 提供一组预定义的角色,以及用于定义自定义角色层次结构的框架。
所有 Snowflake 用户都自动分配了预定义的 PUBLIC 角色,该角色支持登录 Snowflake 和访问基本对象。
除了 PUBLIC 角色之外,还可以为每个用户分配其他角色,其中一个角色可指定为 默认角色。用户的默认角色决定了用户发起的 Snowflake 会话中使用的角色;但这只是默认角色。用户可以随时更改会话中的角色。
可以在用户创建之时或之后分配角色。
创建和修改用户所需的权限¶
管理账户中的用户需要以下角色或权限:
- 创建用户:
USERADMIN 系统角色可以使用 SQL (CREATE USER) 创建用户。
要为此目的使用自定义角色,请将账户的 CREATE USER 权限授予此角色。
- 修改用户:
角色只有拥有用户的 OWNERSHIP 权限,才能使用 SQL (ALTER USER) 修改大多数用户属性。
创建用户¶
This section describes how to create a user in a specific account.
备注
Snowsight, requires that you specify a password when you create a user. The CREATE USER command and UserCollection.create Python API do not.
备注
如果您想创建可以访问组织内多个账户的用户,请参阅 组织用户。
Using Snowsight¶
Sign in to Snowsight.
In the navigation menu, select Governance & security » Users & roles.
选择 + User。
在 User Name 字段中,输入用户的唯一标识符。除非您指定登录名,否则用户将使用此标识符登录 Snowflake。
(可选)在 Email 字段中指定用户的电子邮件地址。
在 Password 和 Confirm Password 字段中,输入用户的密码。
(可选)添加注释,解释创建用户的原因。
选中 Force user to change password on first time login 复选框,以强制用户在登录时更改其密码。
(可选)选择 Advanced User Options 以指定有关用户的其他详细信息:
登录 Snowflake 时要使用的是 Login Name,而不是 User Name。
登录后显示 Display Name。
First Name 和 Last Name 用于填写用户简介。
Default Role、Default Warehouse 和 Default Namespace。
选择 Create User。
使用 SQL¶
使用 CREATE USER 命令创建用户。
重要
在创建用户时,如果为用户分配了默认角色,则必须将此角色显式授予用户。例如:
CREATE USER janesmith PASSWORD = 'abc123' DEFAULT_ROLE = myrole MUST_CHANGE_PASSWORD = TRUE; GRANT ROLE myrole TO USER janesmith;
请注意,GRANT ROLE 命令允许为单个用户分配多个角色。Web 界面目前不支持相同的功能。
使用 Python¶
使用 UserCollection.create Python API 创建用户。
重要
在创建用户时,如果为用户分配了默认角色,则必须将此角色显式授予用户。例如:
from snowflake.core.user import Securable, User my_user = User( name="janesmith", password="abc123", default_role="myrole", must_change_password=True) root.users.create(my_user) root.users['janesmith'].grant_role(role_type="ROLE", role=Securable(name='myrole'))
禁用或启用用户¶
禁用用户将阻止用户登录 Snowflake。您可以通过以下界面禁用用户。
Using Snowsight¶
Sign in to Snowsight.
In the navigation menu, select Governance & security » Users & roles.
Locate the user that you want to disable and select
» Disable User.在打开的确认对话框中,选择 Disable。
要启用用户,请执行相同的步骤,但选择 Enable User。
使用 SQL¶
使用 ALTER USER 命令禁用或启用用户。例如:
禁用用户:
ALTER USER janesmith SET DISABLED = TRUE;
启用用户:
ALTER USER janesmith SET DISABLED = FALSE;
使用 Python¶
使用 UserResource.create_or_alter Python API 禁用或启用用户。例如:
禁用用户:
user_parameters = root.users["janesmith"].fetch() user_parameters.disabled = True root.users["janesmith"].create_or_alter(user_parameters)
启用用户:
user_parameters = root.users["janesmith"].fetch() user_parameters.disabled = False root.users["janesmith"].create_or_alter(user_parameters)
解锁用户¶
如果用户在连续五次尝试后登录失败,则系统会在一段时间(目前为 15 分钟)内为用户锁定其账户。这段时间过去后,系统将自动解除锁定,用户可以尝试再次登录。
要在时间结束前解锁用户,可以使用 ALTER USER 命令或 UserResource.create_or_alter Python API 重置计时器。
以下示例将计时器重置为 0,这将立即解锁用户 janesmith:
ALTER USER janesmith SET MINS_TO_UNLOCK= 0;
user_parameters = root.users["janesmith"].fetch()
user_parameters.mins_to_unlock = 0
root.users["janesmith"].create_or_alter(user_parameters)
小技巧
如果一个角色具有所有 Snowflake 用户的 OWNERSHIP 权限,建议将该角色授予多个用户。这样,如果锁定了该角色的某个成员,另一个成员可以解锁该用户。
更改用户的会话参数¶
要显示用户的会话参数,请使用以下 SQL 语法:
SHOW PARAMETERS [ LIKE '<pattern>' ] FOR USER <name>
要更改用户的会话参数,请使用以下语法:
ALTER USER <name> SET <session_param> = <value>
例如,允许用户无限期地保持连接到 Snowflake 而不会超时:
ALTER USER janesmith SET CLIENT_SESSION_KEEP_ALIVE = TRUE;
要将用户的会话参数重置为默认值,请使用以下语法:
ALTER USER <name> UNSET <session_param>
修改其他用户属性¶
您可以使用 ALTER USER 命令或 UserResource.create_or_alter Python API 修改所有其他用户属性。您可以使用 Snowsight 修改许多相同的用户属性。
例如:
将用户
janesmith的姓更改为Jones:- SQL:
ALTER USER janesmith SET LAST_NAME = 'Jones';
- Python:
user_parameters = root.users["janesmith"].fetch() user_parameters.last_name = "Jones" root.users["janesmith"].create_or_alter(user_parameters)
- Snowsight:
Sign in to Snowsight.
In the navigation menu, select Governance & security » Users & roles.
对于 Last Name 字段,请输入 Jones。
选择 Save User。
设置或更改用户
janesmith的默认仓库、命名空间、主要角色和辅助角色:- SQL:
ALTER USER janesmith SET DEFAULT_WAREHOUSE = mywarehouse DEFAULT_NAMESPACE = mydatabase.myschema DEFAULT_ROLE = myrole DEFAULT_SECONDARY_ROLES = ('ALL');
- Python:
user_parameters = root.users["janesmith"].fetch() user_parameters.default_warehouse = "mywarehouse" user_parameters.default_namespace = "mydatabase.myschema" user_parameters.default_role = "myrole" user_parameters.default_secondary_roles = "ALL" root.users["janesmith"].create_or_alter(user_parameters)
- Snowsight:
备注
不能为使用 Snowsight 的用户设置默认辅助角色。
Sign in to Snowsight.
In the navigation menu, select Governance & security » Users & roles.
打开 Advanced User Options 并在相关字段中输入值。
选择 Save User。
查看用户¶
您可以通过以下界面查看用户信息。
使用 SQL¶
使用 DESCRIBE USER 或 SHOW USERS 命令可查看有关一个或多个用户的信息。
例如:
DESC USER janeksmith;
使用 Python¶
使用 UserResource.fetch Python API 获取用户信息。
例如:
my_user = root.users["janesmith"].fetch()
print(my_user.to_dict())
使用 UserCollection.iter Python API 列出账户中的用户。
例如:
users = root.users.iter(like="jane%")
for user in users:
print(user.name)
使用 Snowsight¶
Sign in to Snowsight.
In the navigation menu, select Governance & security » Users & roles.
找到要查看更多详细信息的用户。
您可以查看显示名称、状态、上次登录时间、所有者角色以及用户是否设置了多因素身份验证 (MFA)。如果用户有注释,可以将鼠标悬停在
上。(可选)选择用户以查看更多详细信息,例如其默认设置、授予用户权限的角色以及授予用户的角色。
删除用户¶
删除用户也会从 Snowflake 中删除用户凭据。
重要
删除用户时,该用户拥有的文件夹、工作表和仪表板将无法访问,除非启用了共享,否则 不会 转移给其他用户。
具有 查看、查看 + 运行和编辑权限 的共享收件人将保留其分配的权限,并且仍然可以访问共享文件夹、工作表和仪表板。但是,只有具有编辑权限的用户才能修改或删除共享文件夹、工作表和仪表板。如果您在删除所有者之前没有将编辑权限授予至少另一个用户,则无法删除该所有者的文件夹、工作表和仪表板。
如果已删除用户的工作表未启用共享,管理员最多可以 恢复该用户拥有的 500 个工作表。
小心
Classic Console 中的所有工作表都将被永久删除,如果以前未与其他用户共享,仪表板将无法访问。
系统不会删除用户创建的对象(如表或视图),因为在创建对象时,这些对象属于用户的活跃角色。在 角色层次结构 中分配了相同角色或更高角色的其他用户可以管理对象或将所有权转让给其他角色。
Using Snowsight¶
Sign in to Snowsight.
In the navigation menu, select Governance & security » Users & roles.
在打开的确认对话框中,选择 Drop User。
使用 SQL¶
使用 DROP USER 命令可删除用户。
DROP USER janesmith;
使用 Python¶
使用 UserResource.drop Python API 删除用户。
root.users["janesmith"].drop()