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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Tempo di commiati, il 4 giugno 2007 alle 15:04
- White paper su vardecimal storage format, il 30 maggio 2007 alle 10:49
- Tools per SQL Server, il 24 maggio 2007 alle 08:34
- Serie di articoli su SSIS, il 17 maggio 2007 alle 08:32
- Non c'è pace per il SP2, il 4 maggio 2007 alle 09:39
- Recuperare informazioni sugli indici, il 29 aprile 2007 alle 19:04