我有一个包含1000多个数据库的庞大实例。我需要找到一种方法来查询整个实例并查找包含特定用户的数据库以及该用户具有的角色。我不感兴趣用户是否是孤儿。我只是想知道哪些数据库有这个用户,哪些没有。
假设我的用户名为TestUser。不包含此用户的数据库应返回NULL。
我希望结果采用以下格式:
Column1 - Database Name
Column2 - UserName (if exists or else NULL)
Column3 - UserRole (if exists or else NULL)
答案 0 :(得分:0)
假设您不寻求发行1000多个选择,一个(非常难看)的解决方案将是:
SELECT 'DB_1' , UserName , UserRole
FROM DB_1.UsersTable
WHERE Username = 'TestUser'
UNION
SELECT 'DB_2' , UserName , UserRole
FROM DB_2.UsersTable
WHERE Username = 'TestUser'
:
:
另一种解决方案是使用DYNAMIC SQL:
同样,这两种方法都是可耻的。
答案 1 :(得分:0)
create table #temp
(
dbname sysname,
dbrole sysname,
dbuser sysname
)
Exec sp_msforeachdb '
if db_id()>4
Begin
insert into #temp
select db_name(), rp.name as database_role, mp.name as database_user
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)
End
'
角色部分从这里引用:
Get list of all database users with specified role