Individuare tutti i permessi di un utente

di Luca Bianchi, in SQL Server,

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

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese