Snowflake:用户和权限的备份和恢复
Posted
技术标签:
【中文标题】Snowflake:用户和权限的备份和恢复【英文标题】:Snowflake: Backup and recovery of users and permissions 【发布时间】:2021-06-09 16:31:31 【问题描述】:使用雪花(云数据平台)可以使用时间旅行和故障保护来防止由于用户错误导致的数据损坏,由于硬件故障导致的数据丢失,但这是否涵盖所有用户、角色和授权? (我们的安全性非常广泛,数百个用户和角色通常嵌套在几个级别深处。)如果没有,是否有一种简单的方法来支持所有这些?我试图编写一个 SQL 脚本来生成所有创建用户/角色和授权语句,但事实证明,由于授权语句语法的所有排列,从 grants_to_roles 视图中提取它比预期的更困难。而不是继续我想我会在这里询问是否可能我遗漏了一些东西并且它没有必要,或者也许其他人已经这样做了并且我正在重新发明***。
TIA
【问题讨论】:
【参考方案1】:查看这篇文章,该帖子创建了 3 个自动执行此操作的程序:
https://community.snowflake.com/s/article/How-to-Capture-Snowflake-Users-Roles-and-Grants-Into-a-Table授权、角色和表格:
CREATE OR REPLACE TABLE DBUSERS (NAME VARCHAR,CREATED_ON TIMESTAMP_LTZ,LOGIN_NAME VARCHAR,DISPLAY_NAME VARCHAR,FIRST_NAME VARCHAR,LAST_NAME VARCHAR,EMAIL VARCHAR,MINS_TO_UNLOCK VARCHAR,DAYS_TO_EXPIRY VARCHAR,TCOMMENT VARCHAR,DISABLED VARCHAR,MUST_CHANGE_PASSWORD VARCHAR,SNOWFLAKE_LOCK VARCHAR,DEFAULT_WAREHOUSE VARCHAR,DEFAULT_NAMESPACE VARCHAR,DEFAULT_ROLE VARCHAR,EXT_AUTHN_DUO VARCHAR,EXT_AUTHN_UID VARCHAR,MINS_TO_BYPASS_MFA VARCHAR,OWNER VARCHAR,LAST_SUCCESS_LOGIN TIMESTAMP_LTZ,EXPIRES_AT_TIME TIMESTAMP_LTZ,LOCKED_UNTIL_TIME TIMESTAMP_LTZ,HAS_PASSWORD VARCHAR,HAS_RSA_PUBLIC_KEY VARCHAR,REFRESH_DATE TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP())COMMENT = ‘stores snapshot of current snowflake users’ ;
CREATE OR REPLACE TABLE DBROLES (CREATED_ON TIMESTAMP_LTZ,NAME VARCHAR,IS_DEFAULT VARCHAR,IS_CURRENT VARCHAR,IS_INHERITED VARCHAR,ASSIGNED_TO_USERS NUMBER,GRANTED_TO_ROLES NUMBER,GRANTED_ROLES NUMBER,OWNER VARCHAR,RCOMMENT VARCHAR,REFRESH_DATE TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP())COMMENT = ‘stores snapshot of current snowflake roles’ ;
CREATE OR REPLACE TABLE DBGRANTS (CREATED_ON TIMESTAMP_LTZ,PRIVILEGE VARCHAR,GRANTED_ON VARCHAR,NAME VARCHAR,GRANTED_TO VARCHAR,GRANTEE_NAME VARCHAR,GRANT_OPTION VARCHAR,GRANTED_BY VARCHAR,REFRESH_DATE TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP())COMMENT = ‘stores snapshot of current grants’ ;
更可持续的方法是将用户、角色和授权的主副本放在 Snowflake 之外 - 在版本控制的环境中。然后,您可以使用 Terraform、SatoriCyber 或 Permifrost 等工具快速创建和重新创建您想要的环境。
见https://gitlab.com/gitlab-data/permifrost/。
【讨论】:
这就是我想要做的。把它放在雪花外面。我认为最简单的方法是查询用户和 grants_to_* 视图以提取 DDL 并将其保存在 .SQL 文件中。我会检查这些程序.. 这有必要吗?故障保护是否会恢复用户角色和授权? 我只是查看了 SP,他们没有建立授权声明。他们所做的只是将视图复制到表格中。那不是我想要的。我想生成一个脚本,在整个数据库、架构或帐户发生灾难性丢失的情况下,可以执行该脚本来重新创建用户、角色和授权。以上是关于Snowflake:用户和权限的备份和恢复的主要内容,如果未能解决你的问题,请参考以下文章