使用会话策略

本主题提供如何使用会话策略的示例。

标准会话策略

以下步骤是创建会话策略和针对帐户或用户设置会话策略的代表性指南。

这些步骤假设采用集中管理方法,其中名为 policy_admin 的自定义角色拥有会话策略(即具有会话策略的 OWNERSHIP 权限),并负责在账户或用户上设置会话策略(即具有 APPLY SESSION POLICY on ACCOUNT 权限或 APPLY SESSION POLICY ON USER 权限)。

备注

要为账户设置策略,policy_admin 自定义角色必须具有以下权限:

  • 对包含会话策略的数据库和架构的 USAGE 权限。

  • 在包含会话策略的架构上 CREATE SESSION POLICY。

请按照以下步骤实施会话策略。

  1. 创建允许用户创建和管理会话策略的自定义角色。在本示例中,自定义角色为 policy_admin,尽管该角色可以有任何合适的名称。

    如果自定义角色已存在,请继续下一步。

    否则,请创建 policy_admin 自定义角色:

    USE ROLE USERADMIN;
    
    CREATE ROLE policy_admin;
    
    Copy
  2. 授予自定义角色权限

    如果 policy_admin 自定义角色尚不具有以下权限,请授予这些权限,如下所示:

    • 对包含会话策略的数据库和架构的 USAGE 权限。

    • 在包含会话策略的架构上 CREATE SESSION POLICY。

    • 账户的 APPLY SESSION POLICY 权限。

    • 如果您计划在用户级别设置会话策略,请对每个用户 APPLY SESSION POLICY。

    USE ROLE SECURITYADMIN;
    
    GRANT USAGE ON DATABASE mydb TO ROLE policy_admin;
    
    GRANT USAGE, CREATE SESSION POLICY ON SCHEMA mydb.policies TO ROLE policy_admin;
    
    GRANT APPLY SESSION POLICY ON ACCOUNT TO ROLE policy_admin;
    
    Copy

    如果将会话策略与单个用户关联:

    GRANT APPLY SESSION POLICY ON USER jsmith TO ROLE policy_admin;
    
    Copy

    有关更多信息,请参阅 命令、操作和权限总结

  3. 创建新的会话策略。

    USE ROLE policy_admin;
    
    CREATE SESSION POLICY mydb.policies.session_policy_prod_1
      SESSION_IDLE_TIMEOUT_MINS = 30
      SESSION_UI_IDLE_TIMEOUT_MINS = 30
      COMMENT = 'Session policy for the prod_1 environment';
    
    Copy

    有关更多信息,请参阅 CREATE SESSION POLICY

  4. 使用 ALTER ACCOUNT 命令针对账户设置会话策略,或者使用 ALTER USER 命令针对用户设置会话策略。

    USE ROLE policy_admin;
    
    ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_1;
    
    ALTER USER jsmith SET SESSION POLICY my_database.my_schema.session_policy_prod_1;
    
    Copy

    重要

    要替换已为账户或用户设置的会话策略,请先取消设置会话策略,然后为账户或用户设置新的会话策略。例如:

    ALTER ACCOUNT UNSET session policy;
    
    ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_2;
    
    Copy

在会话策略中指定次要角色

以下各节详细介绍了如何在会话策略中指定次要角色:

有关会话策略中的次要角色的详细信息,请参阅 会话策略中的次要角色

在会话策略中设置属性

安全管理员可以创建新的会话策略或修改现有会话策略,以设置 ALLOWED_SECONDARY_ROLES 属性。例如:

  • 创建新的会话策略以允许所有次要角色执行以下操作:

    CREATE OR REPLACE SESSION POLICY prod_env_session_policy
      SESSION_IDLE_TIMEOUT_MINS = 30
      SESSION_UI_IDLE_TIMEOUT_MINS = 30
      ALLOWED_SECONDARY_ROLES = ('ALL')
      COMMENT = 'session policy for use in the prod_1 environment';
    
    Copy
  • 修改现有会话策略以禁止次要角色:

    ALTER SESSION POLICY prod_env_session_policy
      SET ALLOWED_SECONDARY_ROLES = ();
    
    Copy

    如果该属性已经设置,ALTER SESSION POLICY 命令可以修改属性值。

有关语法的详细信息,请参阅 管理会话策略

您可以使用 DESCRIBE SESSION POLICY 命令或调用 GET_DDL 函数来查看 ALLOWED_SECONDARY_ROLES 属性的值。

在会话策略中取消设置属性

您可以使用 ALTER SESSION POLICY 命令取消设置会话策略中的次要角色:

ALTER SESSION POLICY prod_env_session_policy
  UNSET ALLOWED_SECONDARY_ROLES;
Copy

不允许账户中的所有用户都具有次要角色

要防止账户中的所有用户都使用次要角色,请针对该账户设置会话策略,不允许会话使用次要角色。例如:

  1. 修改会话策略以不允许次要角色:

    ALTER SESSION POLICY prod_env_session_policy SET ALLOWED_SECONDARY_ROLES = ();
    
    Copy
  2. 将该会话策略分配给账户:

    ALTER ACCOUNT SET SESSION POLICY prod_env_session_policy;
    
    Copy

如果用户尝试使用 USE SECONDARY ROLES 命令(如 USE SECONDARY ROLES analyst;)激活次要角色,则会出现以下错误消息:

SQL execution error: USE SECONDARY ROLES '[ANALYST]' not allowed as per session policy.

对于特定用户不允许次要角色

要不允许特定用户使用次要角色,请针对该用户设置会话策略,不允许会话使用次要角色。例如,如果该会话策略已存在:

ALTER USER jsmith SET SESSION POLICY prod_env_session_policy;
Copy

如果针对帐户设置了会话策略,则分配给用户的会话策略将覆盖针对帐户的会话策略。

如果用户运行 USE SECONDARY ROLES 命令以激活次要角色,如 USE SECONDARY ROLES (ANALYST, DATA_SCIENTIST);,则他们会看到以下错误消息:

SQL execution error: USE SECONDARY ROLES '[ANALYST, DATA_SCIENTIST]' not allowed as per session policy.

允许用户使用特定的次要角色

要允许用户使用特定的次要角色,请执行以下操作:

  1. 创建会话策略,以指定用户可以使用的次要角色:

    CREATE OR REPLACE SESSION POLICY prod_env_session_policy
      SESSION_IDLE_TIMEOUT_MINS = 30
      SESSION_UI_IDLE_TIMEOUT_MINS = 30
      ALLOWED_SECONDARY_ROLES = (DATA_SCIENTIST, ANALYST)
      COMMENT = 'session policy for user secondary roles data_scientist and analyst';
    
    Copy
  2. 针对用户设置会话策略:

    ALTER USER bsmith SET SESSION POLICY prod_env_session_policy;
    
    Copy

用户可以根据需要使用 USE SECONDARY ROLES 命令激活次要角色。例如:

  • 激活所有次要角色:

    USE SECONDARY ROLES ALL;
    
    Copy
  • 激活 DATA_SCIENTIST 作为次要角色:

    USE SECONDARY ROLES DATA_SCIENTIST;
    
    Copy

有关语法的详细信息,请参阅 USE SECONDARY ROLES

将会话策略复制到目标账户

可以使用数据库复制和账户复制将会话策略及其参考(即对用户或账户的分配)从源账户复制到目标账户。有关详细信息,请参阅:

有关复制指定次要角色的会话策略的详细信息,请参阅 使用次要角色复制会话策略

语言: 中文