Дозволити використання / вибрати для однієї таблиці
Якщо ви надаєте CONNECT лише базі даних, користувач може підключитися, але не має інших привілеїв. Ви повинні надати USAGE для просторів імен (схем) та SELECT для таблиць та представлень окремо так:
GRANT CONNECT ON DATABASE mydb TO xxx;
-- This assumes you're actually connected to mydb..
GRANT USAGE ON SCHEMA public TO xxx;
GRANT SELECT ON mytable TO xxx;
Кілька таблиць / переглядів (PostgreSQL 9.0+)
В останніх версіях PostgreSQL ви можете надати дозволи на всі таблиці / представлення / тощо в схемі, використовуючи одну команду, а не вводити їх по черзі:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO xxx;
Це впливає лише на вже створені таблиці. Більш потужно, ви можете автоматично мати нові ролі, призначені за замовчуванням у майбутньому:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO xxx;
Зауважте, що за замовчуванням це вплине лише на об'єкти (таблиці), створені користувачем, який видав цю команду: хоча він також може бути встановлений для будь-якої ролі, членом якого видається користувач. Однак ви не отримуєте привілеїв за замовчуванням для всіх ролей, до яких ви входите, створюючи нові об'єкти ... тож все ще є деякі фальсифікації. Якщо ви прийняли підхід про те, що база даних має роль власника, а зміни схеми виконуються як ті, що є власником, то вам слід призначити привілеї за замовчуванням для цієї ролі володіння. IMHO, це все трохи заплутано, і вам може знадобитися поекспериментувати, щоб створити функціональний робочий процес.
Кілька таблиць / переглядів (версії PostgreSQL до 9.0)
Щоб уникнути помилок у тривалих змінах у декількох таблицях, рекомендується використовувати наступний "автоматичний" процес для створення необхідних GRANT SELECT
для кожної таблиці / перегляду:
SELECT 'GRANT SELECT ON ' || relname || ' TO xxx;'
FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE nspname = 'public' AND relkind IN ('r', 'v', 'S');
Це повинно вивести відповідні команди GRANT на GRANT SELECT на всіх таблицях, переглядах та послідовностях у відкритому доступі для копіювання та вставки любові. Природно, це стосуватиметься лише таблиць, які вже створені.