我们需要用户将他们的表从他们的个人模式(user_db.username)移动到托管模式(userdb.groupname),它为选择访问提供了一组预定义的权限。在移动桌子时,我们需要完成以下工作:
- 将表移出旧模式
- 删除旧的选择授权
- 应用托管架构中的新授权
我已经查看了 Alter table .. rename to.. 文档,虽然这似乎可以移动表格,但它会保留旧的授权而不应用新的授权。
在 Snowflake SQL 中是否有选项或其他方法可以做到这一点?
我们需要用户将他们的表从他们的个人模式(user_db.username)移动到托管模式(userdb.groupname),它为选择访问提供了一组预定义的权限。在移动桌子时,我们需要完成以下工作:
我已经查看了 Alter table .. rename to.. 文档,虽然这似乎可以移动表格,但它会保留旧的授权而不应用新的授权。
在 Snowflake SQL 中是否有选项或其他方法可以做到这一点?
您可以使用撤销查询删除旧的选择授权: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
这样,您可以在删除旧表之前验证在新表上设置的权限,并可选择删除未来的授权,以便它不会影响将来的其他新表。
您可以通过以下方式做到这一点:
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 中,连接重命名字符串并将完成的字符串复制到工作表中,然后选择运行按钮旁边的所有查询框.