|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Добры день! Подскажите пожалуйста в чем может быть проблема. Нахожусь под пользователем А, делаю два обновления таблицы в схеме B: Код: plsql 1.
проходит великолепно, не делая commit, выполняю второе обновление Код: plsql 1.
получаю ошибку SQL Error [42501]: ERROR: permission denied for schema b делал grant b to a через консоль на самом сервере из-под пользователя postgres все проходит без ошибок. делал пользователья а superuser, но все бес толку... Подскажите пожалуйста в какую сторону копать!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 18:38 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
n@vigator, покажите сообщение об ошибке из логов базы вместе с запросом (возможно фактически там другой запрос выполнялся, например из триггерной функции, в логах должно быть видно). и вывод Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 06:31 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Выдержка и журнала 2019-01-18 09:55:20.439 MSK [7291] ERROR: permission denied for schema markup at character 20 2019-01-18 09:55:20.439 MSK [7291] QUERY: SELECT 1 FROM ONLY "markup"."dic_attrs" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x 2019-01-18 09:55:20.439 MSK [7291] STATEMENT: update markup.ent_attrs set vld_error_code='-10002', vld_error_mess='Test2' where id=150050 Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 10:00 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
n@vigator, вывод Код: sql 1.
все-таки покажите (из psql). и имя пользователя, из под которого запрос выполнялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 14:38 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Alexius, List of schemas Name | Owner | Access privileges | Description --------+-----------+------------------------+------------- markup | validator | validator=UC/validator | (1 row) запрос из-под validator ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 17:24 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
n@vigatorAlexius, List of schemas Name | Owner | Access privileges | Description --------+-----------+------------------------+------------- markup | validator | validator=UC/validator | (1 row) запрос из-под validator есть ли доступ у validator к таблице "markup"."dic_attrs" на select? Скорее всего нет. А вот почему одно обновление работает а два той же строки в одной транзакции нет - тут уже интереснее: В postgresql есть оптимизация что если значения ключевых (участвующих в foreign keys) полей в таблице у которой есть fk не меняются то foreign keys проверка не производится. Но эта оптимизация по ряду причин срабатывает ТОЛЬКО на первое обновление строки в транзакции, второе и последующие будут проверять валидность fk и для этого пользователю делающему update нужны права на select всех таблиц на которые ссылается markup.ent_attrs. Вот этот вот запрос "SELECT 1 FROM ONLY "markup"."dic_attrs" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x" - как раз кусок внутреннего механизма проверки fk. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 02:50 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Maxim Boguk, права есть на все таблицы, выполнена команда Код: plsql 1.
попробовал выполнить запрос из-под validator Код: plsql 1.
выполнился без проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 09:33 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
n@vigator, можете на основе: - pg_dumpall -g вытащить всё относящееся к пользователю - pg_dump -s своей базы Собрать воспроизводимый пример? У меня не вышло воспроизвести ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 10:14 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
n@vigatorMaxim Boguk, права есть на все таблицы, выполнена команда Код: plsql 1.
попробовал выполнить запрос из-под validator Код: plsql 1.
выполнился без проблем очень странно... у вас 100% стандартный ванильный postgresql (а не какой то левый форк)? никаких странных вещей типа RLS не используете? в каталоге руками не ковырялись? если клонировать схему базы с правами в чистую базу на этом же кластере - проблема остается? если да было бы интересно увидеть dump схемы полный. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 10:16 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Postgresql скачан с www.postgresql.org 11 версия. К сожалению передать dump не смогу, а то будут всякие кары (( Причем такое получается только под пользователе validator, а если выполнить теже запросы в консоле из-под postgresвсе работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 12:51 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
n@vigatorPostgresql скачан с www.postgresql.org 11 версия. К сожалению передать dump не смогу, а то будут всякие кары (( Причем такое получается только под пользователе validator, а если выполнить теже запросы в консоле из-под postgresвсе работает. Таак bypassRLS меня у postgresql смущает. Я уже спрашивал про не используется ли у вас RLS. Если используется - без схемы базы тут ничего мы не поймем. В нормальной ситуации такого НЕ БЫВАЕТ как у вас. Я бы предположил как гипотезу странное влияние RLS на проверку FK. PS: еще раз предлагаю попробовать на чистой базе воспроизвести проблему. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 13:16 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Maxim BogukТаак bypassRLS меня у postgresql смущает. postgres разве не дефолтно BYPASSRLS? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 13:22 |
|
Permission Denied и двойное обновление одного и тоже поля
|
|||
---|---|---|---|
#18+
Воспроизвести можно так. Из под суперпользователя postgres: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Подключаемся под b, который владелец схемы и имеет все права на таблицы, и получаем ошибку: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Не поможет даже суперпользователь: Код: sql 1. 2. 3. 4. 5. 6. 7.
Дело в том, что проверка внешнего ключа выполняется с правами владельца таблицы(в нашем случае a), а не пользователя выполняющего запрос. Думаю, что у вас владельцем таблиц в схеме markup является пользователь markup и у него нет прав на схему markup. Попробуйте выполнить из под postgres: Код: sql 1.
По идее ошибка должна уйти. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 16:40 |
|
|
start [/forum/topic.php?fid=53&msg=39762241&tid=1995394]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 411ms |
0 / 0 |