2016-09-24 12 views
0

Использование: Postgres 9, CentOS 7, Каталог данных Postgres не по умолчанию, а RSync, чтобы убедиться, что права правильные. И да, соответствующие файлы .config были изменены.Использование Postgres PGCrypto для шифрования требует, чтобы суперпользователь запускал запросы на просмотр

При попытке запросить вид, содержащий зашифрованный элемент в качестве NON суперпользователя (TestUser), я получаю эту ошибку:

ERROR: must be superuser to read files CONTEXT: PL/pgSQL function decrypt_data(bytea) line 13 at assignment

Если я запускаю тот же запрос с использованием Postgres суперпользователя, запрос завершает отлично.

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

я уже запустить следующие гранты для Testuser:

GRANT ALL PRIVILEGES ON DATABASE xxx_db to Testuser; 
GRANT SELECT ON ALL TABLES IN SCHEMA xxxxx TO Testuser; 
GRANT ALL ON ALL TABLES IN SCHEMA xxxxx TO Testuser; 

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

Права доступа к ключам 775 прямо сейчас, я даже попробовал 777 без везения.

Любые идеи?

ответ

0

Я нашел проблему. Мне нужно предоставить пользователю права доступа к функциям.

ГРАНТ ВЫПОЛНИТЬ ВСЕ ФУНКЦИИ В СХЕМЕ xxxxx К yyyyyyyyyy;

0

pgcrypto является расширением PostgreSQL описано здесь: https://www.postgresql.org/docs/current/static/pgcrypto.html

но это не дает decrypt_data(bytea) функцию.

Эта функция, как представляется, является настраиваемым кодом, который открывается, чтобы открыть файл на стороне сервера, с pg_read_file() или аналогичным методом.

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

Вы можете проверить это в источнике decrypt_data(bytea), который может быть получен с:

select pg_get_functiondef('decrypt_data(bytea)'::regprocedure); 

или \df+ decrypt_data(bytea) изнутри PSQL.

 Смежные вопросы

  • Нет связанных вопросов^_^