0

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

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

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

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

4

2 回答 2

2

您可以使用撤销查询删除旧的选择授权: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

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

于 2019-11-26T19:50:04.670 回答
1

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

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

于 2019-11-26T19:44:17.603 回答