Oracle
 sql >> Database >  >> RDS >> Oracle

Differenza tra query di privilegi nelle tabelle

Sono abbastanza diversi, sì.

In Oracle, i privilegi su una tabella possono essere concessi direttamente a un utente (nel qual caso apparirebbero in ALL_TAB_PRIVS ) o i privilegi possono essere concessi a un ruolo (visibile in ROLE_TAB_PRIVS ) e quel ruolo può essere concesso a un utente (visibile in USER_ROLE_PRIVS ). La prima query ti mostrerà gli utenti che hanno sovvenzioni dirette su una tabella. La seconda query ti mostrerà gli utenti a cui è stato concesso un ruolo a cui è stato concesso l'accesso alla tabella (nota che in entrambi i casi dovresti davvero specificare un OWNER oltre al nome della tabella). Nessuno dei due ti mostrerà informazioni sulle concessioni che sono state concesse attraverso più livelli nidificati di ruoli (ad esempio, all'utente A è stato concesso il ruolo 1, al ruolo 1 è stato concesso il ruolo 2, al ruolo 2 è stato concesso l'accesso a una tabella). Le sovvenzioni effettuate tramite ruoli possono anche diventare un po' complicate perché ci sono ruoli predefiniti e non predefiniti e ruoli protetti da password e ruoli possono essere abilitati e disabilitati in una sessione.

In generale, suggerirei di dare un'occhiata agli script disponibili sul sito di Pete Finnigan se vuoi avere qualcosa che copra tutti i casi possibili. In questo caso, probabilmente vorrai usare il suo script who_can_access per determinare quali utenti possono accedere a una determinata tabella.