python psycopg2 postgresql: получение «разрешения запрещены для настроек отношений» - PullRequest
0 голосов
/ 21 октября 2018

Я прошел через многочисленные другие сообщений (чтобы назвать только несколько), но все еще застрял.Конфигурация достаточно проста, и я подробно опишу все, хотя я думаю, что только некоторые из следующих уместны:

Запуск psql от имени пользователя postgres в Ubuntu 16.04, у меня естьсозданная база данных qedadmin с 3 таблицами: сети , устройства и настройки ;есть также отношение последовательности networks_networkid_seq , принадлежащее networks.networkId .

Я пишу скрипт на python для запуска на том же сервере с использованием psycopg2, который должен выполнить SELECT в таблице settings .Во многих примерах сценарии подключаются как пользователь ' postgres ', и это действительно отлично работает для меня.Однако я полагаю, что для такого рода вещей лучше использовать менее привилегированного пользователя, поэтому я создал пользователя qedserver с паролем.

Используя этого нового пользователя, пароль и localhost вСтрока подключения psycopg2, я могу успешно получить соединение и курсор (и если я использую неправильные значения пользователя или пароля, соединение не будет установлено, поэтому я знаю, что определенный пользователь и пароль, а также аутентификация от python работают).Тем не менее, все мои попытки выполнить оператор SELECT для таблицы settings возвращают код 42501: в настройках отношений отказано в разрешении.

Я изначально предоставил пользователю qedserver только SELECT привилегии и только для таблицы настройки :

GRANT SELECT ON settings TO qedserver;

Поскольку это не сработало, я постепенно повысил привилегии до такой степени, что теперь пользователь qedserver имеет ВСЕ ПРИВИЛЕГИИ на все 3 таблицы, на отношении последовательности и в базе данных:

GRANT ALL PRIVILEGES ON settings TO qedserver;
GRANT ALL PRIVILEGES ON devices TO qedserver;
GRANT ALL PRIVILEGES ON networks TO qedserver;
GRANT ALL PRIVILEGES ON networks_networkid_seq TO qedserver;
GRANT ALL PRIVILEGES ON DATABASE qedadmin TO qedserver;

, но я все еще получаю «разрешение на доступ к настройкам отношения».

ясно, изменение только строки подключения в моем скрипте Python с одного для пользователя postgres на одно для пользователя qedserver делает разницу между успехом и неудачей, поэтому я не предоставляю код Python, потому что ядумаю, что это не имеет значения (но я могу сделать это, если вы думаете, что это поможет).

Чего мне не хватает?

Отредактировано для добавления: нет пользователя linux с именем qedserver ;Я не думаю, что это должно быть, но, возможно, я ошибаюсь по этому поводу?(дальнейшее редактирование: я только что провел этот эксперимент, и это не имело никакого значения.)

Обновления: За комментарий и ссылку @klin, я вижу, что все привилегии были успешно предоставлены:qedserver имеет привилегии arwdDxt в сетях , устройствах и настройках таблиц и rwU привилегиях в networks_networkid_seq последовательности;и \l сообщает о привилегиях доступа к базе данных qedadmin =Tc/postgres + postgres=CTc/postgres + qedserver=CTc/postgres.

Я также отредактировал файл конфигурации (/etc/postgresql/10/main/postgresql.conf на моемsystem), чтобы установить log_error_verbosity = VERBOSE и отправить SIGHUP процессу postgresql, чтобы перечитать файл конфигурации.Это добавляло другую строку в журнал ошибок (/var/log/postgresql/postgresql-10-main.log в моей системе) для каждой неудачной попытки;теперь журнал показывает (новая строка - средняя):

qedserver@qedadmin ERROR:  42501: permission denied for relation settings
qedserver@qedadmin LOCATION:  aclcheck_error, aclchk.c:3410
qedserver@qedadmin STATEMENT:  SELECT * FROM settings WHERE deviceId = 10020;

Что еще я могу посмотреть или попытаться добиться прогресса?

Редактирование через 4 месяца, чтобы добавить: это все для нового проекта, для которого я думал, что было бы выгодно использовать postgresql по нескольким причинам;столкнувшись с этой проблемой на раннем этапе разработки и будучи не в состоянии решить ее в течение нескольких дней, я сдался и вместо этого выбрал mysql.Не совсем «решение» ОП, поэтому я не добавляю его в качестве ответа ...

...