Individuare tutti i permessi di un utente
di Luca Bianchi, in SQL Server, lunedì 23 aprile 2007 ore 08.23
Capita molto spesso che mi si chieda come fare ad avere un report su tutti i permessi assegnati ad un utente in un database. Sia in Enterprise Manager con le versioni precedenti di SQL Server che in SQL Server Management Studio con la versione 2005, è possibile visualizzare i permessi di un utente o di un database role; se però l'utente oltre ad avere assegnati dei permessi in maniera diretta (cosa sempre sconsigliabile) dispone anche di altri permessi derivanti dall'appartenenza ad uno o più database role, ottenere la lista dei permessi risultanti diventa più complesso.
La soluzione arriva dalla funzione fn_my_permissions che, benchè come dica il nome serva a restituire l'elenco dei propri permessi, può essere utilizzata in un execution context da parte di un utente con privilegi adeguati per impersonare temporaneamente l'utente di cui vuole ottenere la lista dei permessi, siano essi assegnati direttamente allo user in questione che derivanti dalla sua appartenenza ad uno o più database roles.
Nello script seguente sono riportati gli step per testare la soluzione
CREATE DATABASE Test
GO
CREATE LOGIN MyLogin WITH PASSWORD = 'ComplexP@s$w0rd'
GO
USE Test
GO
CREATE USER MyUser FOR LOGIN MyLogin
GO
CREATE ROLE MyRole
GO
EXEC sp_addrolemember 'MyRole', 'MyUser'
GO
CREATE TABLE dbo.MyTable
(
ID int not null
)
GO
CREATE TABLE dbo.MyTableBis
(
ID int not null
)
GO
GRANT SELECT ON dbo.MyTable TO MyRole
GO
GRANT INSERT, UPDATE, DELETE ON dbo.MyTable TO MyUser
GO
EXECUTE AS USER = 'MyUser'
SELECT TABLE_SCHEMA, TABLE_NAME, permission_name
FROM INFORMATION_SCHEMA.TABLES
CROSS APPLY fn_my_permissions(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT')
REVERT
Nella stessa categoria
I più letti del mese



















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.