查找存在特定用户及其角色的所有数据库
Posted
技术标签:
【中文标题】查找存在特定用户及其角色的所有数据库【英文标题】:Find all databases where particular user exists and its role 【发布时间】:2016-11-30 12:54:30 【问题描述】:我有一个包含 1000 多个数据库的巨大实例。我需要找到一种方法来查询整个实例并找到包含特定用户以及该用户具有什么角色的数据库。我对用户是否是孤儿不感兴趣。我只想知道哪些数据库有这个用户,哪些没有。
假设我的用户名为 TestUser。不包含此用户的数据库应返回 NULL。
我想要以下格式的结果:
Column1 - Database Name
Column2 - UserName (if exists or else NULL)
Column3 - UserRole (if exists or else NULL)
【问题讨论】:
【参考方案1】:假设您不希望发布 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:
-
收集您要检查的所有数据库的列表,
构建一个包含上述 select 语句的字符串,
执行语句。
同样,这两种方法都是可耻的。
【讨论】:
【参考方案2】: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
【讨论】:
以上是关于查找存在特定用户及其角色的所有数据库的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 查询以查找数据库中所有用户的所有权限/访问权限