Моя відповідь подібна до цієї на ServerFault.com .
Бути консервативним
Якщо ви хочете бути більш консервативними, ніж надання "всіх привілеїв", ви можете спробувати щось подібне.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
Використання public
там посилається на назву схеми за замовчуванням, створеної для кожної нової бази даних / каталогу. Якщо ви створили схему, замініть власне ім’я.
Доступ до схеми
Щоб взагалі отримати доступ до схеми, для будь-якої дії користувачеві повинні бути надані права "використання". Перш ніж користувач зможе вибрати, вставити, оновити або видалити, спочатку користувачеві має бути надано «використання» схеми.
Ви не помітите цієї вимоги під час першого використання Postgres. За замовчуванням кожна база даних має першу схему з іменем public
. І кожному користувачеві за замовчуванням автоматично надано права на використання цієї конкретної схеми. Додаючи додаткову схему, ви повинні чітко надати права на використання.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Витяг з документа Postgres :
Для схем надає доступ до об’єктів, що містяться у зазначеній схемі (припускаючи, що також виконуються власні вимоги до привілеїв об’єктів). По суті, це дозволяє грантоотримувачеві "шукати" об'єкти в схемі. Без цього дозволу все ще можна побачити імена об’єктів, наприклад, запитуючи системні таблиці. Крім того, після відкликання цього дозволу існуючі серверні резервні копії можуть мати оператори, які раніше виконували цей пошук, тому це не повністю безпечний спосіб запобігти доступу до об’єкта.
Для подальшого обговорення див. Запитання: Що саме ВИКОРИСТАННЯ ВИКОРИСТАННЯ НА СХЕМУ? . Зверніть особливу увагу на відповідь експерта Postgres Крейга Рінгера .
Існуючі об’єкти проти майбутнього
Ці команди впливають лише на існуючі об'єкти. Таблиці та подібні, які ви створюєте в майбутньому, отримують привілеї за замовчуванням, доки ви не виконаєте ці рядки вище. Дивіться іншу відповідь Ервіна Брандштеттера, щоб змінити значення за замовчуванням, впливаючи тим самим на майбутні об’єкти.