-- Consultar los permisos de objeto del usuario
exec sp_helprotect NULL, 'UsuarioNombre'
-- Consultar el rol del usuario
exec sp_helpuser 'UsuarioNombre'
-- Consultar qué usuarios tienen un rol de sistema especificado
Ejecutivo sp_helpsrvrolemember 'sysadmin'
-- Se pueden consultar roles anidados
CON tree_roles
(
SELECCIONA role_principal_id, member_principal_id
DE sys.database_role_members
DONDE member_principal_id = USER_ID('NombreDeUsuario')
UNION ALL
SELECCIONA c.role_principal_id.c.member_principal_id
DE sys.database_role_members como c
Unió interna tree_roles
en tree_roles.member_principal_id = c.role_principal_id
)
SELECT distinto USER_NAME(role_principal_id) Nombre del rol
DE tree_roles
-- Tabla básica relacionada con otros permisos
seleccionar * de sysusers
select * de syspermissions
-- ¿Quién tiene acceso a mi instancia de SQL Server?
ESCOGER
nombre como Nombre de Usuario, type_desc como Tipo de Usuario is_disabled como Está Deshabilitado
DE sys.server_principals
dónde type_desc en('WINDOWS_LOGIN', 'SQL_LOGIN')
orden por UsuarioTipo, nombre, IsDisabled
-- ¿Quién tiene acceso a mis bases de datos?
ESCOGER
dp.name como UsuarioNombre, dp.type_desc como UsuarioTipo, sp.name como LoginName sp.type_desc como LoginType
DESDE sys.database_principals DP
UNIR sys.server_principals SP EN dp.principal_id = sp.principal_id
orden por UserType
seleccionar * de sys.database_principals
-- Roles de servidor
escoger
p.name como NombreDeUsuario, p.type_desc como UsuarioTipo, pp.name como NombreDeRolDeServidor pp.type_desc como NombreRolServidor
De sys.server_role_members Roles
unir sys.server_principals p en roles.member_principal_id = p.principal_id
Únete sys.server_principals pp en roles.role_principal_id = pp.principal_id
donde pp.name en ('sysadmin')
orden por NombreRolServidor, Nombre de Usuario
-- Roles en la base de datos
ESCOGER
p.name como UsuarioNombre, p.type_desc como UsuarioTipo, pp.name como DBRoleName, pp.type_desc como DBRoleType, pp.is_fixed_role como IfFixedRole
DE sys.database_role_members roles
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
dónde pp.name en('db_owner', 'db_datawriter')
-- ¿Qué pueden hacer estos usuarios?
ESCOGER
grantor.name como GrantorName, dp.state_desc como StateDesc, dp.class_desc como ClassDesc dp.permission_name como PermissionName ,
OBJECT_NAME(major_id) como NombreDeObjeto, Nombre del Beneficiario = grantee.name
DE sys.database_permissions DP
ÚNETE sys.database_principals beneficiario en dp.grantee_principal_id = grantee.principal_id
ÚNETE sys.database_principals otorgante en dp.grantor_principal_id = grantor.principal_id
donde permission_name como '%UPDATE%'