Предоставить разрешения для пользователей для любых новых таблиц, созданных в postgresql

В настоящее время я использую это для предоставления разрешений:

grant select on all tables in schema public to <user_name>;

alter default privileges in schema public grant select on tables to <user_name>;

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

Я использую этого пользователя (имя_пользователя) для копирования данных в другую базу данных.

Ответ 1

Нашел ответ. Он находится в этой строке в документации.

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

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

Ответ 2

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

CREATE OR REPLACE FUNCTION auto_grant_func()
RETURNS event_trigger AS $$
BEGIN
    grant all on all tables in schema public to <username>;
    grant all on all sequences in schema public to <username>;
    grant select on all tables in schema public to <username>;
    grant select on all sequences in schema public to <username>;
END;
$$ LANGUAGE plpgsql;

CREATE EVENT TRIGGER auto_grant_trigger
    ON ddl_command_end
    WHEN TAG IN ('CREATE TABLE', 'CREATE TABLE AS')
EXECUTE PROCEDURE auto_grant_func();

Ответ 3

Чтобы предоставить привилегии по умолчанию, U действительно нужно предоставить права пользователю, с которым вы создаете таблицу.

Например: вы создаете таблицы как SA_user, но читаете таблицы как READ_user. Ваш код должен выглядеть следующим образом:

ALTER DEFAULT PRIVILEGES 
FOR USER SA_user
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO READ_user;

Таким образом, всякий раз, когда SA_user создает таблицу, он предоставляет права выбора для READ_user.