查找特定用户所在的所有数据库及其角色

时间:2016-11-30 12:54:31

标签: sql tsql sql-server-2012 system-tables

我有一个包含1000多个数据库的庞大实例。我需要找到一种方法来查询整个实例并查找包含特定用户的数据库以及该用户具有的角色。我不感兴趣用户是否是孤儿。我只是想知道哪些数据库有这个用户,哪些没有。

假设我的用户名为TestUser。不包含此用户的数据库应返回NULL。

我希望结果采用以下格式:

Column1 - Database Name

Column2 - UserName (if exists or else NULL)

Column3 - UserRole (if exists or else NULL)

2 个答案:

答案 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. 收集您要检查的所有数据库的列表
  2. 构建一个托管上述选择语句的字符串,
  3. 执行声明。
  4. 同样,这两种方法都是可耻的。

答案 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