Versione veloce:
Quale comando devo emettere per consentire a un proprietario del database di consentirgli di accedere alle tabelle in questo database e questo può essere fatto dall'account di quel proprietario?
Versione più lunga:
Sto creando un database su RDS. Ho un utente "root" che ho configurato con Amazon.
Amazon crea automaticamente il ruolo di gruppo 'rds_superuser' che è molto privilegiato, ma in realtà non è un superutente.
Sto creando un database e un utente per l'applicazione come segue:
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;
Ho aggiornato questo script per riflettere i suggerimenti di Craig Ringer su come dovrei gestirlo.
Quando l'app si connette (con le credenziali master_application) crea (e quindi possiede) le tabelle.
Il mio problema è che non riesco a utilizzare il mio accesso amministrativo (rootish) per eseguire query perché quell'utente non ha privilegi sulla tabella.
Sono stato in grado di risolverlo prima eseguendo quanto segue dall'account dell'applicazione:
GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;
Ma sembra strano che un utente subordinato conceda i privilegi a un utente amministrativo.
Quindi ... Esiste un comando che posso eseguire prima o dopo aver creato le tabelle dall'applicazione che garantirà che il proprietario del database possa accedere alle tabelle all'interno del database?
aggiorna dopo aver provato di nuovo i privilegi di modifica ...
Ciò non consente ancora l'accesso alle tabelle; Vedo che viene suggerito altrove e ha perfettamente senso, ma non funziona per me. Da una shell 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)
integration_root è il mio utente superutente e gli utenti è una tabella all'interno del mio database.
Aggiornare
Ho ricevuto una risposta abbastanza inutile da qualcuno di Amazon.
Mi hanno chiesto di chiamare ALTER DEFAULT PRIVILEGES dall'account di accesso master_application. Anche se questo probabilmente funzionerebbe, non risponderebbe alla mia domanda (che è come posso farlo accadere solo dall'account rds_superuser).
Ho chiesto loro di chiarire questo e sono andati via.