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

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

【讨论】:

以上是关于查找存在特定用户及其角色的所有数据库的主要内容,如果未能解决你的问题,请参考以下文章

Oracle12C多租户管理用户角色权限

查找具有特定角色的用户

SQL Server 查询以查找数据库中所有用户的所有权限/访问权限

查找具有特定 spring 安全角色的用户

是否有针对 Netezza(Toad 数据点)的查询以查找存在特定字段名称的所有表

Laravel Eloquent - 返回具有特定角色的用户(多对多关系)