Пільги для власника бази даних; користувач програми


15

Швидка версія:

Яку команду потрібно видати, щоб дозволити власнику бази даних дозволити їй отримувати доступ до таблиць у цій базі даних і чи можна це зробити з облікового запису цього власника?


Більш довга версія:

Я створюю базу даних на RDS. У мене є "root" користувач, який я налаштував з Amazon.

Amazon автоматично створює групову роль 'rds_superuser', яка є дуже привілейованою, але насправді не є суперрусером.

Я створюю базу даних та користувача для програми так:

create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;

\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;

Я оновив цей сценарій, щоб відобразити пропозиції Крейга Рінгера щодо того, як мені впоратися з цим.

Коли додаток підключається (з обліковими записами master_application), він створює (і тому володіє) таблицями.

Моя проблема полягає в тому, що я не можу використовувати свій адміністративний (кореневий) вхід для запуску запитів, оскільки у цього користувача немає привілеїв на столі.

Я вже міг це вирішити, запустивши з облікового запису програми наступне:

GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;

Але здається, що підлеглий користувач надає приватні особи назад адміністративному користувачеві.

Отже ... Чи є команда, яку я можу запускати до або після створення таблиць із програми, яка гарантуватиме власникові бази даних доступ до таблиць у базі даних?


оновлення після повторної спроби привілеїв alter за замовчуванням ...

Це все ще не дає доступу до таблиць; Я бачу, що це пропонується в іншому місці, і це має повний сенс, але це не працює для мене. З оболонки psql:

master_integration=> \ddp
                           Default access privileges
      Owner       | Schema | Type  |             Access privileges             
------------------+--------+-------+-------------------------------------------
 integration_root |        | table | integration_root=arwdDxt/integration_root+
                  |        |       | rds_superuser=arwdDxt/integration_root
(1 row)

master_integration=> \dp users
                           Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)

integra_root - це мій користувач, що користується суперпопулярністю, а користувачі - це таблиця в моїй базі даних.


Оновлення

Я отримав досить марну відповідь від когось із Amazon.

Вони попросили мене зателефонувати НАДНІШНЯ ПРИВІЛЕГИ з реєстраційного входу master_application. Хоча це, ймовірно, спрацює, воно не відповість на моє запитання (а це, як я можу це зробити виключно з облікового запису rds_superuser).

Я попросив їх уточнити це, і вони пішли.

Відповіді:


9

Ти хочеш ALTER DEFAULT PRIVILEGES.

Надайте rds_superuserправа доступу за замовчуванням для всіх нових таблиць.

Це впливає лише на таблиці, створені після ALTER. Для існуючих таблиць ви повинні мати GRANTправа.


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

Це впливає тільки на таблиці , створені післяALTER . Коли ти це зробив? Для існуючих таблиць ви повинні мати GRANTправа.
Крейг Рінгер

Я змінив приватні приватні файли, а потім створив таблиці. Я спробую ще раз, можливо, я помилився.
Енді Девіс

З цим все-таки не пощастило, хоча це абсолютно здається командою, яка повинна вирішити проблему. Я оновив команду, щоб включити вихід з \ ddp та \ dp з однієї з таблиць.
Енді Девіс

Жахливо дивно. Чи можете ви відтворити проблему в звичайному (не RDS) PostgreSQL?
Крейг Рінгер

0

Загальнодоступна схема повинна бути видимою для всіх користувачів. Ви не повинні обмежувати права публічної схеми лише однією групою.

Отже, якщо ви не використовуєте:

GRANT ALL ON SCHEMA public TO GROUP rds_superuser WITH GRANT OPTION;

Ви можете безпечно працювати з загальнодоступною схемою з усіма обліковими записами.

Якщо ви не хочете, щоб окремі облікові записи псували ваші загальнодоступні таблиці схем, створіть нову роль (для користувачів вашого додатка) та скасуйте права з цієї конкретної ролі всередині загальнодоступної схеми. Щось на зразок:

CREATE USER mywebuser WITH PASSWORD '*****';
REVOKE ALL PRIVILEGES ON SCHEMA public FROM mywebuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mywebuser; (or whatever rights you need to provide)

Не навпаки, як ви намагаєтеся це зробити.


Так? GRANTНіколи не повинні бути в змозі зменшити права доступу. Я не переконаний. Зауважте, що права на схему також не успадковуються новими таблицями в цій схемі, тому доступ до publicсхеми не означає, що ви можете використовувати таблиці в ній.
Крейг Рінгер

Нарешті мені вдалося спробувати це, і це не допомагає ситуації.
Енді Девіс

Я відредагував питання про усунення гранту, на який посилався @Aleandros. Це не здавалося проблемою, але я думаю, що це було відволіканням.
Енді Девіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.