【问题标题】:Move Tables & Revoke All Privileges移动表格并撤销所有权限
【发布时间】:2020-03-18 18:19:55
【问题描述】:

我们需要用户将他们的表从他们的个人模式 (user_db.username) 移动到托管模式 (userdb.groupname),它为选择访问提供了一组预定义的权限。在移动桌子时,我们需要完成以下工作:

  1. 将表移出旧模式
  2. 删除旧的选择授权
  3. 应用托管架构中的新授权

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

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

【问题讨论】:

  • 您可以执行 ALTER 表选项,然后立即撤销/授予权限吗?我猜每个用户都拥有该表并正在移动它,因此您可能可以给每个用户一个他们执行的 SQL 脚本。如果我在要求中遗漏了什么,请告诉我。
  • 您可能还需要考虑将原始表的克隆创建到新架构中。然后,此克隆将继承托管模式的 ON FUTURE 授权。然后,您可以简单地删除原始表。
  • Suzy,我们有数百个表要移动,所以我们正在尽量减少 # SQL 语句。
  • 迈克,谢谢!这将很好地工作。

标签: snowflake-cloud-data-platform alter-table sql-revoke


【解决方案1】:

您可以使用撤销查询删除旧的选择授权:https://docs.snowflake.net/manuals/sql-reference/sql/revoke-privilege.html

例如:

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

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

例如:

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

然后我会将旧模式中的表克隆到新模式中

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

这样,您可以在删除旧表之前验证新表上设置的权限,并可选择删除未来的授权,以免将来影响其他新表。

【讨论】:

    【解决方案2】:

    你可以这样做:

    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,连接重命名字符串并将完成的字符串复制到工作表中,然后选择“运行”按钮旁边的“所有查询”框。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 1970-01-01
      • 2016-06-05
      • 2016-02-02
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      相关资源
      最近更新 更多