Rac*_*SQL 5 permissions sql-server-2008-r2
我真的在寻找这个答案有一段时间了。我敢打赌这里有一个帖子,但是,我真的找不到(即使在 google 上)。
我认为这是一项简单的任务。
我想列出特定用户的所有数据库。
有没有办法做到这一点?
它可以是视图或游标。我就是想不出什么。
您可以模拟该登录名并使用HAS_DBACCESS
内置函数。
USE master;
GO
EXECUTE AS LOGIN = N'your_login_name';
GO
SELECT name, HAS_DBACCESS(name)
FROM sys.databases;
GO
REVERT;
Run Code Online (Sandbox Code Playgroud)
如果需要查找每个数据库中的用户映射(例如数据库中的用户名并不总是与登录名相同),则可以使用动态SQL,例如
CREATE TABLE #db(name SYSNAME);
GO
use master;
GO
EXECUTE AS LOGIN = 'floob';
GO
INSERT #db(name)
SELECT name FROM sys.databases
WHERE HAS_DBACCESS(name) = 1
AND database_id > 4; -- don't really care about system DBs, right?
GO
REVERT;
GO
DECLARE @sql NVARCHAR(MAX) = N'', @login SYSNAME = N'floob';
SELECT @sql += N'
UNION ALL
SELECT login = @login, db = ''' + QUOTENAME(name) + N''',
username = p.name
FROM ' + QUOTENAME(name) + N'.sys.database_principals AS p
WHERE sid = SUSER_SID(@login)'
FROM #db;
SET @sql = STUFF(@sql, 1, 11, N'');
EXEC sys.sp_executesql @sql, N'@login SYSNAME', @login;
GO
DROP TABLE #db;
GO
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8068 次 |
最近记录: |