移动表并撤销所有权限

Move Tables & Revoke All Privileges

我们需要用户将他们的 table 从他们的个人架构 (user_db.username) 移动到托管架构 (userdb.groupname),后者为 [=26] 提供一组预定义的权限=] 访问。在移动table时,我们需要完成以下工作:

  1. 将 table 移出旧架构
  2. 删除旧的 select 赠款
  3. 应用来自托管架构的新授权

我查看了 Alter table .. rename to.. 文档,虽然这似乎可以移动 table,但它会保留旧的授权而不应用新的那些。

在 Snowflake SQL 中是否有选项或其他方法可以做到这一点?

您可以通过以下方式做到这一点:

ALTER TABLE db.schema.table RENAME TO other_db.other_schema.table;

CREATE TABLE other_db.other_schema.table AS SELECT * FROM db.schema.table;

CREATE TABLE other_db.other_schema.table CLONE db.schema.table;

CLONE 复制了安全和权限,但 CTAS 没有。

如果你有很多表,你可以获得表列表(SHOW TABLES;)然后将输出复制到Excel,连接重命名字符串并将完成的字符串复制到工作表和 select 运行 按钮旁边的所有查询框。

您可以通过撤销查询删除旧的 select 资助:https://docs.snowflake.net/manuals/sql-reference/sql/revoke-privilege.html

例如:

revoke all privileges on all tables in schema mydb.myschema from role <roletoremove>;

然后,如果有帮助,您可以在目标架构中设置 Future grants。这将导致在该架构中创建的任何新 table 具有这些权限:https://docs.snowflake.net/manuals/sql-reference/sql/grant-privilege.html

例如:

grant select,insert on future tables in schema mydb.myschema to role <roletoadd>;

然后我会将旧架构中的 table 克隆到新架构中

create or replace mydatabase.newschema.table1 clone mydatabase.oldschema.table1

这样您就可以验证在新的 table 上设置的权限,然后再删除旧的权限,并可选择删除未来的授权,这样它就不会影响其他新的 table未来。