SuperAPI AI 工具集

rbac

安全与审计

查看项目

更新于 10-16 04:08

技能介绍

用途

该技能是一个用于设计 Snowflake 基于角色的访问控制(RBAC)的路由器。它帮助用户选择适合其账户的角色层级,然后路由到针对每一层的聚焦子流程(账户角色、环境管理员、域管理员、数据库访问角色、模式访问角色)以及跨领域关注点(角色画像、仓库、次要角色、策略角色)。

如果你是 RBAC 新手,请从 architecture-patterns/INSTRUCTIONS.md 开始,以决定你的组织实际需要哪些层。大多数账户并不需要全部六层。

何时使用

在以下情况使用此技能:

  • 为新的 Snowflake 账户设计全新的 RBAC 层级。
  • 将现有的混乱角色重构为清晰的访问角色模式。
  • 为数据库或模式创建读/写/创建角色。
  • 在功能(画像)角色与数据产品访问角色之间做决定。
  • 在掩码或行访问策略中正确引用角色。

何时不使用

将非 RBAC 关注点委托给捆绑技能:

主题 委托给
多账户策略、组织级治理 organization-management
通过列表进行跨账户数据共享 internal-marketplace-org-listing
编写掩码 / 行访问策略 SQL data-governance
声明式共享或应用程序包 declarative-sharing

此技能告诉你应引用哪些角色。那些技能处理策略实现和共享机制。

完整角色层级

  1. 开箱即用账户角色(ACCOUNTADMIN、SYSADMIN、USERADMIN、SECURITYADMIN) └── 2. 环境管理员角色(DEV_ADMIN、PROD_ADMIN) └── 3. 业务域管理员(联邦 / 中心辐射) └── 4. 数据产品管理员(按团队) └── 5. 数据库访问角色(DB_R、DB_RW、DB_C) └── 6. 模式访问角色(<schema>_R、_RW、_C)

子流程

层 / 主题 文件
选择层级 architecture-patterns/INSTRUCTIONS.md
画像对齐角色 personas/INSTRUCTIONS.md
开箱即用账户角色 oob-account-roles/INSTRUCTIONS.md
环境管理员角色 environment-admin-roles/INSTRUCTIONS.md
域与数据产品管理员 domain-admin-roles/INSTRUCTIONS.md
数据库访问角色 database-access-roles/INSTRUCTIONS.md
模式访问角色 schema-access-roles/INSTRUCTIONS.md
仓库访问角色 warehouse-access-roles/INSTRUCTIONS.md
次要角色 secondary-roles/INSTRUCTIONS.md
策略中的角色 policy-roles/INSTRUCTIONS.md

工作流

  1. 运行 architecture-patterns/INSTRUCTIONS.md 以选择适用哪些层。
  2. 自上而下实施:账户 → 环境 → 域 → 产品 → 数据库 → 模式。

⚠️ 停止点:在确定用户需要哪些层之后,在加载任何子流程之前确认计划。未经用户明确批准,不要链入实施。

  1. 对于每一层,打开匹配的子流程并遵循它。
  2. 在将访问权限交给用户之前,使用 SHOW GRANTS TO ROLE <name> 验证授权。

常见错误

  • 将对象权限直接授予用户或功能角色。始终先授予访问角色,然后将访问角色授予功能角色。这使层级保持可重构。
  • 在模式上跳过 MANAGED ACCESS。没有它,对象所有者可以独立授予访问权限并绕过你的层级。
  • 忘记未来授权。没有 GRANT ... ON FUTURE 加上 GRANT ... ON ALL,新对象会静默失去访问权限。
  • 在启用次要角色时,在行访问策略中使用 CURRENT_ROLE()。使用 IS_ROLE_IN_SESSION(),以便拥有多个授权角色的用户看到他们应该看到的数据。参见 policy-roles/INSTRUCTIONS.md。
  • 在不需要时创建仓库访问角色。大多数账户可以直接将仓库的 USAGE 授予功能角色。
  • 让 ACCOUNTADMIN 拥有对象。对象所有权应落在 SYSADMIN 或域管理员上,绝不应是 ACCOUNTADMIN。

停止点

  • 步骤 1 之后——在加载任何子流程之前,确认所选层和实施计划。

此路由器技能本身不发出任何 SQL。每个创建角色、应用授权或更改模式的子流程都定义了自己的停止点。所有子流程的通用规则:

⚠️ 停止点:在运行任何 CREATE ROLE、GRANT、REVOKE、ALTER SCHEMA … ENABLE MANAGED ACCESS 或 DROP ROLE 语句之前,向用户展示计划中的 SQL 并等待明确确认。RBAC 更改易于应用,但一旦用户开始依赖它们,就难以逆转。