Sto cercando uno script t-sql in grado di elencare i database e i rispettivi ruoli/privilegi mappati per un particolare utente. Utilizzo di SQL Server 2008 R2.T-SQL per elencare tutti i mapping utente con ruoli/permessi del database per un accesso
risposta
utilizzando fn_my_permissions
EXECUTE AS USER = 'userName';
SELECT * FROM fn_my_permissions(NULL, 'DATABASE')
È questo il genere di cosa che si desidera? Potrebbe essere necessario estenderlo per ottenere maggiori informazioni dalle tabelle sys.
use master DECLARE @name VARCHAR(50) -- database name DECLARE db_cursor CURSOR FOR select name from sys.databases OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN print @name exec('USE ' + @name + '; select rp.name, mp.name from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id) join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)') FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor
Grazie a @JDC. Temo che non mi abbia aiutato. Per essere precisi, quello che sto cercando è la stessa cosa chiamata "Server role" e "User Mapping" sotto Login Properties per un particolare login. Ho bisogno di avere i ruoli del server interessati e i dettagli di mappatura degli utenti per un particolare accesso elencato. – muddu83
CREATE TABLE #tempww (
LoginName nvarchar(max),
DBname nvarchar(max),
Username nvarchar(max),
AliasName nvarchar(max)
)
INSERT INTO #tempww
EXEC master..sp_msloginmappings
-- display results
SELECT *
FROM #tempww
ORDER BY dbname, username
-- cleanup
DROP TABLE #tempww
Hai risolvere la questione? Ho appena trovato questo codice qui:
Penso che avrò bisogno di fare un po 'di tweaking, ma essenzialmente questo ha ordinato per me!
Spero lo faccia anche per te!
J
Stola questo da here. L'ho trovato molto utile!
DECLARE @DB_USers TABLE
(DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)
INSERT @DB_USers
EXEC sp_MSforeachdb
'
use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'''
SELECT
dbname,username ,logintype ,create_date ,modify_date ,
STUFF(
(
SELECT ',' + CONVERT(VARCHAR(500),associatedrole)
FROM @DB_USers user2
WHERE
user1.DBName=user2.DBName AND user1.UserName=user2.UserName
FOR XML PATH('')
)
,1,1,'') AS Permissions_user
FROM @DB_USers user1
GROUP BY
dbname,username ,logintype ,create_date ,modify_date
ORDER BY DBName,username
Ho scritto una piccola query per trovare il permesso di un utente su un database specifico.
SELECT * FROM
(
SELECT
perm.permission_name AS 'PERMISSION'
,perm.state_desc AS 'RIGHT'
,perm.class_desc AS 'RIGHT_ON'
,p.NAME AS 'GRANTEE'
,m.NAME AS 'USERNAME'
,s.name AS 'SCHEMA'
,o.name AS 'OBJECT'
,IIF(perm.class = 0, db_name(), NULL) AS 'DATABASE'
FROM
sys.database_permissions perm
INNER JOIN sys.database_principals p ON p.principal_id = perm.grantee_principal_id
LEFT JOIN sys.database_role_members rm ON rm.role_principal_id = p.principal_id
LEFT JOIN sys.database_principals m ON rm.member_principal_id = m.principal_id
LEFT JOIN sys.schemas s ON perm.class = 3 AND perm.major_id = s.schema_id
LEFT JOIN sys.objects AS o ON perm.class = 1 AND perm.major_id = o.object_id
UNION ALL
SELECT
perm.permission_name AS 'PERMISSION'
,perm.state_desc AS 'RIGHT'
,perm.class_desc AS 'RIGHT_ON'
,'SELF-GRANTED' AS 'GRANTEE'
,p.NAME AS 'USERNAME'
,s.name AS 'SCHEMA'
,o.name AS 'OBJECT'
,IIF(perm.class = 0, db_name(), NULL) AS 'DATABASE'
FROM
sys.database_permissions perm
INNER JOIN sys.database_principals p ON p.principal_id = perm.grantee_principal_id
LEFT JOIN sys.schemas s ON perm.class = 3 AND perm.major_id = s.schema_id
LEFT JOIN sys.objects AS o ON perm.class = 1 AND perm.major_id = o.object_id
) AS [union]
WHERE [union].USERNAME = 'Username' -- Username you will search for
ORDER BY [union].RIGHT_ON, [union].PERMISSION, [union].GRANTEE
I permessi di ruoli predefiniti del database non vengono visualizzati in sys.database_permissions. Pertanto, le entità di database possono disporre di autorizzazioni aggiuntive non elencate qui.
Io non preferisco
EXECUTE AS USER = 'userName';
SELECT * FROM fn_my_permissions(NULL, 'DATABASE')
perché è solo il recupero che i permessi utente non ha da dove vengono!
Forse ho trovato il modo di unire il permesso ruoli predefiniti del database concesso per l'utente un giorno ...
Pls godersi la vita e odiano gli Utenti: D
CREATE TABLE #tempww (
LoginName nvarchar(max),
DBname nvarchar(max),
Username nvarchar(max),
AliasName nvarchar(max)
)
INSERT INTO #tempww
EXEC master..sp_msloginmappings
-- display results
declare @col varchar(1000)
declare @sql varchar(2000)
select @col = COALESCE(@col + ', ','') + QUOTENAME(DBname)
from #tempww Group by DBname
Set @sql='select * from (select LoginName,Username,AliasName,DBname,row_number() over(order by (select 0)) rn from #tempww) src
PIVOT (Max(rn) FOR DBname
IN ('[email protected]+')) pvt'
EXEC(@sql)
-- cleanup
DROP TABLE #tempww
Qual è il numero in alcune colonne del database? Abbastanza sicuro che sia il database a cui il nome di accesso ha il permesso di accedere ma è il numero di volte in cui questo login ha effettuato l'accesso? – JustJohn
- 1. In Perforce, elencare tutti i changeset per utente
- 2. SqlServer 08: query per elencare tutti i database in un'istanza?
- 3. Come elencare tutti i metodi per un oggetto in Ruby?
- 4. accesso negato per utente @ 'localhost' al database ''
- 5. TSQL per connettere l'utente al database
- 6. Come elencare tutti i database MongoDB in Node.js?
- 7. Un modo migliore per rappresentare i ruoli utente nel database
- 8. Determina tutti i gruppi per un utente definito
- 9. C'è un modo per elencare tutti i percorsi disponibili in un'applicazione Nancy?
- 10. TSQL sapere membri del ruolo di database
- 11. Modifica del database predefinito per un accesso SQL Azure
- 12. Elimina tutti i processi per un dato utente
- 13. C'è un modo per elencare tutti i contenitori di finestra mobile in esecuzione per nome?
- 14. Come posso elencare tutti i trigger di un database in sqlite?
- 15. Come posso elencare TUTTI i record DNS?
- 16. CMS multi-sito - Database per ogni sito o UN database per tutti i siti?
- 17. SQL Server - Autorizzazione di accesso per l'accesso in lettura a tutti i database esistenti e futuri
- 18. Accesso negato per utente 'root' @ 'localhost' - Laravel
- 19. Taglia tutti i campi del database
- 20. Come elencare tutti i file modificati in un volume shadow?
- 21. Definizione del mapping di tipo Scala per tutti i tipi di dati Spark SQL
- 22. Associazione WAGF Datagrid per elencare i problemi
- 23. MongoDB + Web App: database per utente
- 24. C'è un modo per elencare i repository git nel terminale?
- 25. Come si elencano tutti i trigger in un database MySQL?
- 26. C'è un modo per elencare tutti i binding su un oggetto Ember.Object?
- 27. Come elencare tutti i tag Git?
- 28. TSQL: Creare una visualizzazione che accede più database
- 29. Trova tutti gli oggetti del database per nome?
- 30. Come elencare tutti i collegamenti simbolici su un filesystem NTFS
La ringrazio ma io @Amon penso di non essere stato chiaro. L'output dello script dovrebbe darmi l'elenco dei dbs, gli utenti mappati al dbs e l'appartenenza al ruolo del database per ognuno di essi per un dato accesso. – muddu83