Altro
Query di SQL Server per trovare tutti i permessi/accessi per tutti gli utenti in un database
Vorrei scrivere una query su un sql 2008 che riporti tutti gli utenti che hanno accesso a un database specifico, o oggetti all'interno del database come tabelle, viste e stored procedure, direttamente o a causa di ruoli, ecc. Questo rapporto verrebbe utilizzato per scopi di controllo della sicurezza. Non so se qualcuno ha una query che si adatta completamente alle mie esigenze, ma spero che qualcosa che mi darà un buon inizio. Sia sql 2008, 2005 o 2000 farà, probabilmente posso convertire come necessario.
180
3
Questo è il mio primo tentativo di una query, basato sui suggerimenti di Andomar. Questa query ha lo scopo di fornire un elenco di permessi che un utente ha applicato direttamente all'account utente, o attraverso ruoli che l'utente ha.
Da SQL Server 2005 in poi, potete usare le viste di sistema per questo. Per esempio, questa query elenca tutti gli utenti in un database, con i loro diritti:
Siate consapevoli che un utente può avere diritti anche attraverso un ruolo. Per esempio, il ruolo
db_data_reader
garantisce i dirittiselect
sulla maggior parte degli oggetti.Non posso commentare la risposta accettata, quindi aggiungerò alcuni commenti qui:
sys.objects
contiene solo gli oggetti dello schema. Quindi per ottenere informazioni sugli oggetti di livello superiore (cioè gli schemi nel nostro caso) è necessario utilizzare la tabellasys.schemas
.[ObjectType]
è meglio usareobj.type_desc
solo per la classe di permessoOBJECT_OR_COLUMN
. Per tutti gli altri casi usareperm.[class_desc]
.IMPERSONATE
. Per ottenere informazioni sulle impersonazioni si dovrebbeLEFT JOIN
consys.database_principals
superm.major_id = imp.principal_id
.sys.login_token
consys.server_principals
perché mostrerà anche i login SQL, non solo quelli Windows'G'
ai tipi di principal consentiti per permettere i gruppi Windowssys
eINFORMATION_SCHEMA
dalla tabella risultante, poiché questi utenti sono usati solo per il servizioPosterò il primo pezzo dello script con tutte le correzioni proposte, anche le altre parti dovrebbero essere cambiate: