Я предполагаю, что вы действительно хотите рекурсивно GRANT
SELECT
право на каждое отношение (таблицу и представление) в базе данных angel_research_production
. Правильный?
Как предоставить доступ ко всем таблицам в базе данных
Если да, то в PostgreSQL 9.0 и выше у вас есть:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
из руководства по GRANT. Обратите внимание на пункт ALL TABLES IN SCHEMA
. Использование:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO angel_research;
Если все ваши пользовательские объекты находятся в public
схеме ( см. ниже) это поможет.
В предыдущих версиях такой функции нет, но ">определяемые пользователем функции существуют как обходные пути.
Pg 9.0 также имеет ИЗМЕНЕНИЕ ПРИВИЛЕГИЙ ПО УМОЛЧАНИЮ, что изменяет права по умолчанию, назначенные только что созданным объектам. Это не влияет на существующие объекты.
Что означает сообщение об ошибке?
Как отмечает TokenMacGuy, отношение — это таблица или представление, а не база данных.
GRANT SELECT ON angel_research_production TO angel_research;
можно рассматривать как сокращение для:
GRANT SELECT ON TABLE angel_research_production TO angel_research
^^^^^
и эта таблица (связь) не существует, поэтому вы получаете сообщение об ошибке, указанное выше.
В руководстве по GRANT или в выходных данных psql
\h GRANT
вы найдете видеть:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Это показывает, что привилегии, которые вы можете GRANT
для базы данных, равны CREATE
, CONNECT
и TEMPORARY
. Нет права SELECT
на базу данных.
Связи? Схема? Хм?
В Pg есть четыре уровня организации:
Кластер – управляется постмастером, принимает подключения по заданному IP-адресу. Комбинация /port содержит одну или несколько баз данных, включая встроенные базы данных template0
, template1
и postgres
. Контролируется postgresql.conf
и pg_hba.conf
. Ваш кластер БД часто создается для вас установщиком или пакетом. Не путать с обычным значением слова cluster как вычислительного кластера или общим значение английского языка.
База данных — содержит одну или несколько схем или схемы. Вы подключаетесь к определенной базе данных при подключении к Pg.
Схема — содержит объекты, включая < em>отношения. Если вы не укажете иное, все, что создано пользователем, попадает в схему public
. Запросы могут явно ссылаться на объекты в нескольких схемах или через search_path, неявно.
Объекты — в некоторой степени специфичные для PostgreSQL, все (включая отношения), которые существует в схеме.
Отношения — вещи, которые выглядят и ведут себя как таблицы, такие как представления и таблицы
Другие объекты также находятся в схемах, таких как функции, приведения, индексы, последовательности, операторы, агрегаты и т. д.
person
Craig Ringer
schedule
02.09.2012