Разрешение отклонено для отношения
Я попытался запустить простую команду sql:
select * from site_adzone;
и я получил эту ошибку
ERROR: permission denied for relation site_adzone
В чем может быть проблема?
Я также попытался сделать выбор для других таблиц и получил такую же проблему. Я также пытался это сделать:
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
но я получил этот ответ с консоли
WARNING: no privileges were granted for "jerry"
Есть ли у вас какая-то идея, что может быть неправильным?
Ответы
Ответ 1
GRANT в базе данных не то, что вам нужно. Грант на таблицах напрямую.
Предоставление привилегий в базе данных в основном используется для предоставления или отмены прав доступа. Это позволяет указать, кто может делать вещи в базе данных, если у них достаточно других разрешений.
Вместо этого вы хотите:
GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;
Это позаботится об этой проблеме.
Ответ 2
Проводка Ron E отвечает за предоставление привилегий для всех таблиц, поскольку это может быть полезно для других.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
Ответ 3
Сначала подключиться к правой базе данных, затем запустите:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
Ответ 4
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;
Ответ 5
Чтобы предоставить разрешения всем существующим таблицам в схеме, используйте:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>
Чтобы указать разрешения по умолчанию, которые будут применяться к будущим таблицам, используйте:
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema>
GRANT <privileges> ON TABLES TO <role>;
например
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;
Если вы используете столбцы SERIAL
или BIGSERIAL
то вы, вероятно, захотите сделать то же самое для SEQUENCES
, иначе ваш INSERT
потерпит неудачу (Postgres 10 IDENTITY
не страдает от этой проблемы и рекомендуется для типов SERIAL
), т.е.
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;
См. Также мой ответ на PostgreSQL Permissions for Web App для получения дополнительной информации и сценария для повторного использования.
Ref:
ГРАНТ
ALTER DEFAULT PRIVILEGES
Ответ 6
1-й и важный шаг - подключитесь к вашей БД:
psql -d yourDBName
2 шаг, предоставить привилегии
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
Ответ 7
Убедитесь, что вы вошли в psql как владелец таблиц. чтобы узнать, кому принадлежат таблицы, используйте \dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
тогда вы можете запустить гранты
Ответ 8
Это часто происходит, когда вы создаете таблицу как пользователь postgres, а затем пытаетесь получить к ней доступ как обычный пользователь. В этом случае лучше всего снова войти в систему как postgres и использовать ALTER TABLE OWNER TO someuser, чтобы изменить владельца таблицы на пользователя, который будет использовать таблицу.
Ответ 9
Я сталкивался с этой проблемой однажды. просто измените пользователя базы данных на суперпользователя, и ваша проблема решена.
ALTER USER myuser С SUPERUSER;