Szybka wersja:
Jakie polecenie powinienem wydać, aby umożliwić właścicielowi bazy danych dostęp do tabel w tej bazie danych i czy można to zrobić z konta tego właściciela?
Dłuższa wersja:
Tworzę bazę danych na RDS. Mam użytkownika „root”, który skonfigurowałem z Amazon.
Amazon automatycznie tworzy rolę grupy „rds_superuser”, która jest bardzo uprzywilejowana, ale w rzeczywistości nie jest superużytkownikiem.
Tworzę bazę danych i użytkownika dla aplikacji w następujący sposób:
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;
Zaktualizowałem ten skrypt, aby uwzględnić sugestie Craiga Ringera dotyczące tego, jak powinienem sobie z tym poradzić.
Kiedy aplikacja łączy się (z poświadczeniami master_application), tworzy (a zatem jest właścicielem) tabele.
Mój problem polega na tym, że nie mogę używać mojego administracyjnego (rootowanego) logowania do uruchamiania zapytań, ponieważ ten użytkownik nie ma uprawnień do tabeli.
Wcześniej udało mi się to rozwiązać, uruchamiając następujące konto aplikacji:
GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;
Wydaje się jednak dziwne, aby podporządkowany użytkownik udzielał przywilejów użytkownikowi administracyjnemu.
Więc ... Czy istnieje polecenie, które mogę uruchomić przed lub po utworzeniu tabel z aplikacji, które zapewnią właścicielowi bazy danych dostęp do tabel w bazie danych?
zaktualizuj po ponownej próbie zmiany domyślnych uprawnień ...
To nadal nie zapewnia dostępu do tabel; Widzę, że jest to sugerowane gdzie indziej i ma to sens, ale nie działa dla mnie. Z powłoki 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)
katalog_główny_integracji to mój użytkownik superużytkownika, a użytkownicy to tabela w mojej bazie danych.
Aktualizacja
Otrzymałem dość bezużyteczną odpowiedź od kogoś z Amazon.
Poprosili mnie, abym zadzwonił do ALTER DEFAULT PRIVILEGES z loginu master_application. Chociaż to prawdopodobnie działałoby, nie odpowiadałoby na moje pytanie (jak mam to zrobić wyłącznie z konta rds_superuser).
Poprosiłem ich o wyjaśnienie i odeszli.