Переместить таблицы и отозвать все привилегии

Нам нужно, чтобы пользователи переместили свои таблицы из своих личных схем (user_db.username) в управляемую схему (userdb.groupname), которая предоставляет предопределенный набор разрешений для выбора доступа. При перемещении стола нам необходимо выполнить следующее:

  1. Переместите таблицу из старой схемы
  2. Удалите старые привилегии выбора
  3. Применить новые гранты из управляемой схемы

Я просмотрел документацию "Изменить таблицу... переименовать в...", и хотя она, похоже, позволяет перемещать таблицу, она сохранит старые права доступа и не применит новые.

Есть ли вариант или другой способ сделать это в Snowflake SQL?

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, объединить строку переименования и скопировать заполненную строку на рабочий лист и выбрать поле Все запросы рядом с кнопкой Выполнить.

Вы можете удалить старые права выбора с помощью запроса отзыва: 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

Таким образом, вы можете проверить разрешения, настроенные для новых таблиц, прежде чем удалять старые и, при необходимости, удалять будущие гранты, чтобы они не влияли на другие новые таблицы в будущем.

Другие вопросы по тегам