-- Interrogare i permessi degli oggetti dell'utente
exécute sp_helprotect NULL, 'UserName'
-- Interrogare il ruolo dell'utente
exec sp_helpuser 'UserName'
-- Interrogare quali utenti hanno un ruolo di sistema specificato
Executive sp_helpsrvrolemember 'sysadmin'
-- I ruoli annidati possono essere interrogati
CON tree_roles
(
SELEZIONA role_principal_id, member_principal_id
DA sys.database_role_members
DOVE member_principal_id = USER_ID('UserName')
UNION ALL
SELEZIONA c.role_principal_id.c.member_principal_id
DA sys.database_role_members come c
tree_roles di giunzione interna
su tree_roles.member_principal_id = c.role_principal_id
)
SELECT distinto USER_NAME(role_principal_id) Nome del ruolo
DA tree_roles
-- Tabella di base relativa ad altri permessi
seleziona * da sysusers
seleziona * da syspermissions
-- Chi ha accesso alla mia istanza SQL Server?
SELEZIONARE
nome come UserName, type_desc come UserType is_disabled come IsDisabled
DA sys.server_principals
dove type_desc in ('WINDOWS_LOGIN', 'SQL_LOGIN')
ordine per UserType, nome, IsDisabled
-- Chi ha accesso ai miei database?
SELEZIONARE
dp.name come UserName, dp.type_desc come UserType, sp.name come LoginName sp.type_desc come LoginType
DA sys.database_principals DP
JOIN sys.server_principals sp SU dp.principal_id = sp.principal_id
ordine per UserType
seleziona * da sys.database_principals
-- Ruoli di server
selezionare
p.name come UserName, p.type_desc come UserType, pp.name come ServerRoleName, pp.type_desc come ServerRoleType
Da sys.server_role_members ruoli
unirsi sys.server_principals p su roles.member_principal_id = p.principal_id
unirsi sys.server_principals pp su roles.role_principal_id = pp.principal_id
dove pp.name in ('sysadmin')
ordine da NomeServerRuolo, Nome Utente
-- Ruoli nel database
SELEZIONARE
p.name come UserName, p.type_desc come UserType, pp.name come DBRoleName, pp.type_desc come DBRoleType, pp.is_fixed_role come IfFixedRole
DA sys.database_role_members ruoli
JOIN sys.database_principals p ON roles.member_principal_id = p.principal_id
JOIN sys.database_principals pp ON roles.role_principal_id = pp.principal_id
dove pp.name in('db_owner', 'db_datawriter')
-- Cosa possono fare questi utenti?
SELEZIONARE
grantor.name come GrantorName, dp.state_desc come StateDesc, dp.class_desc come ClassDesc, dp.permission_name come PermissionName ,
OBJECT_NAME(major_id) come NomeOggetto, Nome Beneficiario = grantee.name
DA sys.database_permissions DP
Unisciti sys.database_principals beneficiario su dp.grantee_principal_id = grantee.principal_id
UNISCITI sys.database_principals finanziatore su dp.grantor_principal_id = grantor.principal_id
dove permission_name come '%UPDATE%'