Разрешение отклонено для отношения

Я попытался запустить простую команду 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;