【发布时间】:2022-01-03 17:21:04
【问题描述】:
我正在寻找您对我为雪花数据仓库项目创建的基于雪花角色的访问控制层次结构的建议。
基本上,我们需要用不同的数据库维护不同的客户端数据。这个数据库创建过程是自动化的,脚本包括为特定客户创建数据库(DEV、QA 和 PROD)、角色等。在这里,我为一个数据库创建了一个具有 3 个不同默认角色的层次结构。
- ADMIN_{ENV}_{CLIENT_ID}
- READ_WRITE_{ENV}_{CLIENT_ID}
- READ_{ENV}_{CLIENT_ID}
然后我创建了一组可以访问所有数据库的角色,例如..
- ADMIN_{ENV}_ALL
- READ_WRITE_{ENV}_ALL
- READ_{ENV}_ALL
希望下图能说明这一点..
我的问题是:
- 继续采用这种方法是否正确?
- 创建数据库对象时,我应该使用哪个角色?系统管理员?例如:在 CLIENT_1_DEV_DB 数据库中创建数据库对象,我应该使用 ADMIN_DEV_CLIENT_1 角色还是 SYSADMIN?
- ADMIN_DEV_CLIENT_1 角色应该能够创建新用户并授予权限。在这种情况下,我应该使用 USERADMIN 还是 SECURITYADMIN?是否有任何方法可以将其限制在数据库级别?
- 如果发生任何问题,有一个用例可以在数据库中克隆模式。在那种情况下如何管理赠款?当我们克隆一个模式时,角色不会保留到克隆的模式中。在这种情况下,复制赠款的最佳方法是什么。拥有另一个具有 MANAGE GRANTS 权限的角色并使用它?
希望您对这些提出建议。谢谢
【问题讨论】:
-
首先,我会为每个环境(DEV、TEST、PROD 等)使用单独的 Snowflake 帐户。它将使您的生活在未来变得更加简单
-
单独的环境帐户并不总是最好的选择。您限制了跨环境克隆数据的能力。我实际上更喜欢单一帐户的良好 RBAC 策略。
-
我同意没有正确的选择,因为它取决于用户的要求。如果他们在纯雪花环境中运行,那么单个帐户可能是要走的路;但是,一旦您开始使用外部工具、与数据治理工具集成等来查看数据管道,那么无论它们是 Dev/Test/Prod,拥有相同名称的对象都会让生活变得更轻松。此外,如果您在受监管的环境中操作,则分离对 Dev 和 Prod 的访问更容易,并且克隆的能力问题不大,因为您无法在 Prod 和 Dev 之间克隆数据
标签: database snowflake-cloud-data-platform roles grant role-based-access-control