Как ВЫБРАТЬ ВЫБРАТЬ ПРИВИЛЕГИИ на столе с подстановочным знаком с psql postgres - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть имена таблиц, которые начинаются с подчеркивания _XXXXXXX 'среди других таблиц.Мне нужно создать пользователя, который сможет выполнять запросы только к этим таблицам «_XXXX» (ничего больше) без возможность просмотра / поиска других таблиц (не начиная с «_XXXXX»).

Как я могу сделать это в Postgres PSQL?:

Я пытался

  GRANT SELECT ON TABLE "_*" TO username;

я получаю следующее:

ОШИБКА: отношение "_ *" неСуществуют

Любая помощь приветствуется.

Спасибо

, когда я выполняю этот код в редакторе запросов PgAdmin4:

DO
$$
DECLARE
  r record;
BEGIN
  FOR r IN SELECT c.relname,
                  n.nspname
                  FROM pg_class c
                       INNER JOIN pg_namespace n
                                  ON n.oid = c.relnamespace
                  WHERE n.nspname = 'Schemas'
                        AND c.relkind = 'r'
                        AND c.relname LIKE '$_%'
                                           ESCAPE '$' LOOP
    EXECUTE 'GRANT SELECT ON "' || r.nspname || '"."' || r.relname || '" TO kpidata;';
  END LOOP;
END;
$$
LANGUAGE plpgsql;

я получаю следующий ответи ничего не меняется (все еще имеют те же права доступа ко всем для созданного пользователя 'kpidata'). Я уверен, что это я, кто не понимает, как все работает

enter image description here

Моя структура БД выглядит следующим образом:

enter image description here

1 Ответ

0 голосов
/ 28 декабря 2018

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

DO
$$
DECLARE
  r record;
BEGIN
  FOR r IN SELECT c.relname,
                  n.nspname
                  FROM pg_class c
                       INNER JOIN pg_namespace n
                                  ON n.oid = c.relnamespace
                  WHERE n.nspname = 'public'
                        AND c.relkind = 'r'
                        AND c.relname LIKE '$_%'
                                           ESCAPE '$' LOOP
    EXECUTE 'GRANT SELECT ON "' || r.nspname || '"."' || r.relname || '" TO username;';
  END LOOP;
END;
$$
LANGUAGE plpgsql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...