Я пытаюсь предоставить пользователю доступ только для чтения к нескольким таблицам.
Вот что я сделал до сих пор:
postgres=# CREATE ROLE myuser LOGIN PASSWORD 'mypassword';
CREATE ROLE
postgres=# GRANT CONNECT ON DATABASE mydb TO myuser;
GRANT
Тесты, которые я пробовал (которые не работают):
postgres=# GRANT SELECT ON TABLE mytable TO myuser;
ERROR: relation "mytable" does not exist
postgres=# GRANT SELECT ON TABLE mydb.mytable TO myuser;
ERROR: schema "mydb" does not exist
postgres=# GRANT SELECT ON TABLE public.mytable TO myuser;
ERROR: relation "public.mytable" does not exist
postgres=# GRANT SELECT ON TABLE mydb.public.mytable TO myuser;
ERROR: cross-database references are not implemented: "mydb.public.mytable"
Ресурсы, на которые я опирался:
https://tableplus.io/blog/2018/04/postgresql-how-to-create-read-only-user.htmlhttps://www.postgresql.org/docs/current/sql-grant.html
Я не понимаю, чего не хватает, потому что я следил за этими статьями, моя логика заключалась бы в том, чтобы указать, в какой базе данных находится таблица, но об этом не упоминается.
Я также уже проверил подобные проблемы на StackOverflow, но шаги такие же, как и ресурсы, которые я упомянул выше.
(не знаю, актуально ли это, но я использую postgresql 9.6)
Помощь будет очень признательна!
============
Обновлено:, когда я запускаю команду \d
postgres=# \d
No relations found.
postgres=# select current_database();
current_database
------------------
postgres
(1 row)
Я думал, что у пользователя postgres есть все привилегии, но, может быть, мне следует подключиться к своему собственному пользователю?
Да, кажется, я подключен не к той базе данных, я не знал, что раньше мне нужно было подключиться к mydb
, чтобы предоставить доступ. Спасибо, что указали на хороший путь! Кажется, мне нужно только знать, как подключиться к mydb
, прежде чем предоставлять свои привилегии.
Вы были правы, после подключения к моей базе данных (\c mydb
) я смог без проблем запускать свои команды, спасибо! Вы хотите, чтобы я отметил ваш ответ как принятый?
Чтобы указать разрешения для конкретной таблицы, вы должны быть подключены к соответствующей базе данных.
Вы можете подключиться к базе данных с помощью команды \connect
или \c
.
Следующие работы:
postgres=# \connect mydb
postgres=# GRANT SELECT ON TABLE mytable TO myuser;
Полезные команды:
Подтвердите свою текущую базу данных: select current_database();
Проверьте доступные отношения: \d
Спасибо @a_horse_with_no_name за указание на ошибку.
Я все еще получаю ОШИБКУ: разрешение запрещено для таблицы отношений, когда я пытаюсь GRANT SELECT ON TABLE mytable TO myuser; Вы знаете, почему это происходит? (Это происходит на GAppEngine Posgres9.6 с использованием публичного адреса и доступа через терминал: psql (9.6.17, сервер 9.6.16) SSL-соединение (протокол: TLSv1.3, шифр: TLS_AES_256_GCM_SHA384, биты: 256, сжатие: выключено) Теперь вы подключены к базе данных...)
Пожалуйста, редактировать свой вопрос и добавьте вывод команды
\d
. Возможно, вы просто подключились не к той базе данных. Вы подключились кmydb
? Вы можете проверить свою текущую базу данных, используяselect current_database();