Мінімальні дотації на доступ лише для однієї таблиці на PostgreSQL


10

Далі наведено список команд, які, здається, працюють для створення нового користувача (входу) та надання доступу лише для читання для однієї вказаної таблиці на PostgreSQL.

Припустимо, що ці команди виконуються під час входу з достатніми привілеями (тобто postgresвхід при встановленні за замовчуванням).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Тепер я хочу надати selectтаблицю tab_abcна базу даних db_xyz, так що це відбувається (база даних db_xyzвибирається як поточна через PgAdmin або щось подібне):

grant select on tab_abc to user_name;

Питання: чи цього достатньо, чи має бути більше грантів ( можливо connect, база даних usage)?

Ці команди, здається, працюють для мене, але моя установка за замовчуванням має налаштування безпеки за замовчуванням. Які додаткові гранти потрібно додати, якщо адміністратор сервера налаштував більш високу безпеку?

Здається, мені не потрібно connectні надавати, ні usageце є неявним під час надання select? Це завжди так?

Відповіді:


12

Питання: чи цього достатньо, чи має бути більше грантів (підключення до бази даних, можливо використання)?

Безпека може бути посилена за замовчуванням, головним чином у цих пунктах:

  • pg_hba.confФайл. Він фільтрує з'єднання до того, як буде розглянуто будь-яку привілей бази даних. За замовчуванням відносно відкритий для локальних з'єднань, але він може бути обмежений явним списком баз даних, імен користувачів та джерел мережі.

  • Дозвіл для публіки , псевдо-роль, яку має кожен. Користувач може неявно підключитися, лише якщо надано привілей на з'єднання PUBLIC. Див. Створений користувач може отримати доступ до всіх баз даних у PostgreSQL без будь-яких грантів . У базі даних можуть бути відкликані всі привілеї у загальнодоступних. Дивіться REVOKE в документі для основної версії PostgreSQL, яку ви використовуєте.

  • Існування publicсхеми. Він створений за допомогою бази даних за замовчуванням для зручності, але це не є обов’язковим. Замість того, щоб видаляти загальнодоступні дозволи зі publicсхеми, DBA можуть мати сенс просто скидати publicсхему, коли нові користувачі взагалі не повинні мати неявного дозволу.

У випадку, коли ці параметри за замовчуванням були видалені, для читання однієї таблиці новому користувачеві слід надати:

GRANT CONNECT ON DATABASE dbname TO username;

На рівні бази даних:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.