Concedi l'accesso a tutte le tabelle di un database


13

Recentemente volevo condividere i diritti di accesso regolari con un utente di un server e mi sono reso conto che un semplice CREATE USERe GRANT ALL ON DATABASEcomandi non gli permettevano di eseguire un semplice SELECTsui dati.

Vorrei concedere i diritti a tutte le tabelle da un determinato database a un utente specificato, ma non sono sicuro che sia la migliore idea concedergli l'accesso all'intero schema in publicquanto non so se consentirebbe un qualche tipo di privilegio escalation. C'è un altro modo?


Perché non puoi semplicemente GRANT SELECT ON TableName TO [Domain\User]? Di solito assegno gli utenti al db_datareaderruolo solo se tutto ciò di cui hanno bisogno è l'accesso in lettura a tutte le tabelle, ma non sono sicuro di quanto tu voglia essere granulare.
Kris Gruttemeyer,

Vorrei concedere tutto CRUD a tutte le tabelle nel database. Inoltre, DROPping e CREATE all'interno di questo database potrebbero rivelarsi utili.
d33tah,

Risposte:


19

Il privilegio su DATABASEconcede solo diritti di connessione generali al database e non di più. Un utente con questo privilegio può vedere solo ciò che il pubblico può vedere.

Per concedere l'accesso in lettura a tutte le tabelle , sono necessari anche i privilegi su tutti gli schemi e le tabelle:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

È inoltre possibile impostare privilegi predefiniti per schemi e tabelle futuri . Esegui per ogni ruolo che crea oggetti nel tuo db

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

Ma devi prima capire l'intero concetto .
Ed è quasi sempre meglio raggruppare i privilegi nei ruoli di gruppo e quindi concedere / revocare il ruolo di gruppo a / da ruoli utente. Relazionato:


È myusrun errore di battitura? Non dovrebbe essere myuser?
attomos

1
@attomos: dovrebbe essere un utente diverso nell'esempio. Ho chiarito.
Erwin Brandstetter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.