基于雪花角色的访问控制 (RBAC) 解释

访问控制是所有数据库环境中的关键概念之一。 在本文中,我们将了解基于 Snowflake 角色的访问控制 (RBAC) 以及如何创建自定义角色并从 Snowflake WebUI 和使用 SnowSQL CLI 客户端授予对角色的访问权限。

1. 什么是基于角色的访问控制 (RBAC)?

雪花 提供基于角色的访问控制 (RBAC) 作为一种机制,用于向安全主体(用户、服务等)授予或拒绝对各种数据库对象和操作的访问权限。

2.什么是角色?

角色是可以授予和撤销对安全对象的权限的实体。 为用户分配角色以允许他们执行其组织的业务功能所必需的活动。

一个用户可以有多个角色分配给他们。 用户可以交换角色以执行具有不同权限集的不同任务。

角色可以分配给其他角色,这也会导致角色层次结构。 具有适当访问权限的用户可以创建自定义角色。 层次结构中高于该位置的任何角色都会继承与该角色关联的权限。

在 Snowflake 帐户中,将有一些内置的系统定义角色。 系统定义的角色不能被删除,分配给这些角色的权限也不能被撤销。

有五个系统定义的角色,Snowflake 确定每个系统角色应该履行的“角色”,用户应该遵循哪些角色。

  • 帐户管理员: ACCOUNTADMIN 职位将 SYSADMIN 和 SECURITYADMIN 职责合二为一。
  • 管理员: 在组织层面,这是一个管理运营的角色。
  • 安全管理员: 该职位负责监控和管理用户和角色。
  • 用户管理员: 该职位负责创建角色和用户。
  • 系统管理员: 在一个帐户中,此角色具有构建仓库、数据库和其他对象的能力。 SYSADMIN 应该汇总所有自定义角色。
  • 上市: 这是一个自动分配给您账户中所有用户和角色的角色。

除了这些系统定义的角色外,还可以根据需要创建角色并为该角色分配权限。 这被称为 自定义角色.

3. 角色层次结构和权限继承

下图说明了系统定义的角色是如何分层的,以及自定义角色如何与系统定义的角色相关联。

ORGADMIN 是一个独特的系统角色,负责监督整个组织的运营。 系统角色的层次结构不包含此角色。

角色层次结构和特权继承

角色层次结构和权限继承示例:

示例 – 角色层次结构和权限继承

在上述 example,

  • 角色 2 继承特权“选择”。
  • 角色 1 继承特权“选择”和“创建”。
  • 已为用户 1 分配了 Role-1,这意味着所有三个权限。
  • 已为用户 2 分配了 Role-2,这意味着“选择”和“创建”权限。

笔记: 权限将授予角色,角色将授予用户,以确定用户可以对系统中的对象执行的操作/操作。

4.如何创建自定义角色

在这里,我们将创建我们之前讨论过的自定义角色。 我们可以从 Snowflake 的 WebUI 或使用创建规则 SnowSQL CLI 客户。 首先,我们将看到图形方式。

4.1。 从 Snowflake WebUI 创建角色

您可以在 Snowflake UI 中查看系统定义的角色。 去 Snowflake-UI ? 帐户 ? 角色.

查看角色查看角色

创建一个名为的新角色 ‘dev_ostechnix’. 为此,请访问 Snowflake-UI ? 帐户 ? 角色 ? 创建.

创建角色创建角色

填写角色名称,选择父角色并评论该角色。

定义角色的属性定义角色的属性

点击“完成”按钮后,将创建新角色“dev_ostechnix”。

我们已经使用系统定义的角色创建了这个自定义角色 ‘帐户管理员’. 目前没有用户被授予此角色。 由于父角色是 SYSADMIN,因此角色“dev_ostechnix”被授予 ‘系统管理员’.

已创建新角色已创建新角色

4.2. 使用 SnowSQL 从命令行创建角色

使用以下命令将 Snowflake 与 SnowSQL 连接:

# snowsql -a uz64318.southeast-asia.azure -u OSTECHNIX

Enter 您的帐户密码:

Password:
* SnowSQL * v1.2.21
Type SQL statements or !help
OSTECHNIX#[email protected](no database).(no schema)>
将 Snowflake 与 SnowSQL 连接起来将 Snowflake 与 SnowSQL 连接起来

ACCOUNT ADMIN 是超级特权角色,我们已经用这个角色登录了。 现在我们将通过角色 ACCOUNT ADMIN 创建一个自定义角色。

您可以使用以下命令检查当前角色:

OSTECHNIX#[email protected](no database).(no schema)>select current_role();
+----------------+
| CURRENT_ROLE() |
|----------------|
| ACCOUNTADMIN   |
+----------------+
1 Row(s) produced. Time Elapsed: 0.133s
OSTECHNIX#[email protected](no database).(no schema)>
检查当前角色检查当前角色

创建角色 ‘TEST_OSTECHNIX’ 与评论 “测试员角色” 使用以下命令。

OSTECHNIX#[email protected](no database).(no schema)>CREATE ROLE "TEST_OSTECHNIX" COMMENT = 'tester role';

样本输出:

+-------------------------------------------+
| status                                    |
|-------------------------------------------|
| Role TEST_OSTECHNIX successfully created. |
+-------------------------------------------+
1 Row(s) produced. Time Elapsed: 0.753s
OSTECHNIX#[email protected](no database).(no schema)>
从命令行创建新角色从命令行创建新角色

您可以使用以下命令查看角色。

OSTECHNIX#[email protected](no database).(no schema)>show ROLES;
显示所有角色显示所有角色

到目前为止,没有授予角色“TEST_OSTECHNIX”任何特权。

使用以下命令验证授权。

OSTECHNIX#[email protected](no database).(no schema)>show grants to role TEST_OSTECHNIX;
验证授予权限验证授予权限

5. 授予角色特权

每个对象类别都有自己的一组权限。 为了 example’虚拟仓库’ 将具有以下权限。

  • 调整: 允许更改仓库的属性。
  • 监视器: 允许监控仓库中运行的查询和仓库的使用情况。
  • 操作: 允许更改仓库的状态,如停止、启动、暂停和恢复。 还允许查看仓库中过去和现在的查询并中止查询。
  • 用法: 允许使用仓库,即允许在仓库中执行查询。
  • 所有权: 允许完全控制仓库。 一次只有一个角色可以对对象拥有此权限。
  • 全部: 允许除 OWNERSHIP 之外的所有权限。

这里我们授予对象的权限 “虚拟仓库” 到我们上面创建的角色。

5.1。 从 Snowflake WebUI 向角色授予权限

如果角色已被授予角色,您可以切换角色。 当我们使用角色 ACCOUNT ADMIN 时,它将具有超级控制权。 通过单击下面的选项切换角色 帐户 在右上角。

现在我们的角色是“帐户管理员”。 它将拥有系统中仓库的所有权限。

查看虚拟仓库查看虚拟仓库

一旦我们切换角色,我们可以看到角色“DEV_OSTECHNIX”无法查看系统中的任何仓库。 角色“DEV_OSTECHNIX”没有任何特权。

验证权限验证权限

要授予权限,用户必须切换到有权授予该角色的角色。 当我们使用 ACCOUNT_ADMIN 时,我们正在切换到它并向角色 DEV_OSTECHNIX 授予权限。

选择要提供权限的仓库所在行,右侧会弹出提供权限。

授予权限授予权限

现在不授予任何特权。 单击“授予权限”以授予角色权限。

授予角色特权授予角色特权

选择您要授予的权限并选择您要授予该权限的角色。 你可以点击 + 右上角的符号以添加要授予的权限。

在这里,我们将 MODIFY 和 OPERATE 权限授予角色 DEV_OSTECHNIX。

授予角色的权限授予角色的权限

您可以通过将角色切换到 DEV_OSTECHNIX 来验证权限。

查看特权查看特权

5.2. 使用 SnowSQL CLI 客户端向角色授予权限

确保您处于应有权授予的角色中。 在这里,我们在此演示中使用 ACCOUNT_ADMIN。

OSTECHNIX#[email protected](no database).(no schema)>select current_role();
+----------------+
| CURRENT_ROLE() |
|----------------|
| ACCOUNTADMIN   |
+----------------+
1 Row(s) produced. Time Elapsed: 0.133s
OSTECHNIX#[email protected](no database).(no schema)>
切换到 ACCOUNT_ADMIN 角色切换到 ACCOUNT_ADMIN 角色

使用下面的“显示”命令查看系统中可用的仓库。

OSTECHNIX#[email protected](no database).(no schema)>show WAREHOUSES;
显示仓库显示仓库

将角色切换到 TEST_OSTECHNIX。

OSTECHNIX#[email protected](no database).(no schema)>use role TEST_OSTECHNIX;
切换角色切换角色

只需查看仓库即可验证仓库的权限。

从命令行验证权限从命令行验证权限

到目前为止,没有向角色 TEST_OSTECHNIX 授予任何特权。

要授予权限,请切换回角色 ACCOUNT_ADMIN。

OSTECHNIX#(no warehouse)@(no database).(no schema)>use role ACCOUNTADMIN;

将仓库“OSTECH_DEMO_3”的权限授予角色 TEST_OSTECHNIX。

OSTECHNIX#COMPUT[email protected](no database).(no schema)>grant MODIFY, OPERATE on warehouse OSTECH_DEMO_3 to role TEST_OSTECHNIX;
从命令行授予权限从命令行授予权限

通过切换到角色 TEST_OSTECHNIX 来验证权限。

OSTECHNIX#[email protected](no database).(no schema)>use role TEST_OSTECHNIX;
OSTECHNIX#(no warehouse)@(no database).(no schema)>show WAREHOUSES;
从命令行显示仓库从命令行显示仓库

现在您可以确保角色 TEST_OSTECHNIX 可以查看仓库 OSTECH_DEMO_3,并且它处于 Suspended 状态。

使用以下命令启动 Warehouse。

OSTECHNIX#(no warehouse)@(no database).(no schema)>alter WAREHOUSE OSTECH_DEMO_3 RESUME;
从命令行启动仓库从命令行启动仓库

使用“show”命令验证状态。

从命令行显示仓库状态从命令行显示仓库状态

现在我们可以确保角色 TEST_OSTECHNIX 对仓库 OSTECH_DEMO_3 具有授予的权限。

笔记: 无论我们在 SnowSQL CLI 中使用什么查询,都可以在 WebUI 中可用的 Snowflake 工作表中使用。

雪花工作表雪花工作表

结论

在本文中,我们介绍了 Snowflake 中基于角色的访问控制 (RBAC)。 我们已经演示了 RBAC 只是在对象“虚拟仓库”上创建角色并授予角色权限。

同样,我们可以提供对其他对象(如数据库、表等)的访问权限。我们将在下一篇文章中详细了解用户管理和为用户提供访问权限。

资源: