Автоматизация Redshift Permissions - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь автоматизировать несколько SQL запросов в Redshift, которые «запускаются» с разрешения пользователя.

Запросы просто создают представление таблицы с фильтром customer_id, создают пользователя с customer_id и дают разрешение на этот customer_id читать представление таблицы. Это не позволяет различным клиентам видеть данные друг друга, и это прекрасно работает, когда я реализовал это вручную.

Проблема, с которой я сталкиваюсь, заключается в автоматизации этого процесса, поскольку в данный момент я выполняю это вручную в Redshift. Я хочу автоматизировать это

То, что я рассмотрел:

  1. Redshift - не поддерживает триггеры.
  2. Лямбда-триггер - Лямбда не запускает из Redshift.
  3. Шлюз API - «запрос» также не является вызовом API, поэтому клиенты не будут выполнять вызов API для разрешений (они не являются техническими).
  4. Воздушный поток - кажется большой установкой для чего-то довольно маленького. Но может работать.
  5. Клей - я использую Клей для загрузки в Redshift в настоящее время. Может быть, я могу добавить что-то в рабочий процесс, который получает отдельный список customer_id, а затем запускает SQL в Redshift (через Workflow)?

Любые мысли или предложения по этому поводу, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Вместо того, чтобы использовать разные View для каждого пользователя, вы должны создать один View, который использует current_user.

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

Для этого может потребоваться столбец, содержащий их имя пользователя, или View должен присоединиться к таблице, которая может сопоставить имя пользователя с customer_id.

Это было бы что-то вроде:

CREATE VIEW foo
AS
SELECT
  ...
FROM table
JOIN users USING (customer_id)
WHERE users.username = current_user
0 голосов
/ 03 февраля 2020

Вы можете использовать ленивый шаблон для создания вида и разрешений. В API-лямбда:

  1. Проверьте, существует ли представление для идентификатора клиента. Если да, проверьте, создан ли пользователь, и имейте разрешение. Затем извлеките данные, используя customer_id user
  2. Если представление не создано, создайте его, используя запрос SQL, go с шагом # 3
  3. , если пользователь не создан, создайте его используя SQL запрос, go для шага # 4

  4. Если разрешение пользователя не создано, создайте его, используя SQL запрос, go для шага # 1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...