SQL Server:查询服务器中所有数据库的数据库用户角色
我想查询我的 sql server 实例中所有数据库的数据库用户角色。我修改了 sp_helpuser 的查询:
select u.name
,case when (r.principal_id is null) then 'public' else r.name end
,l.default_database_name
,u.default_schema_name
,u.principal_id
from sys.database_principals u
left join (sys.database_role_members m join sys.database_principals r on m.role_principal_id = r.principal_id)
on m.member_principal_id = u.principal_id
left join sys.server_principals l on u.sid = l.sid
where u.type <> 'R'
如何修改它以从所有数据库进行查询? sys.databases 和 sys.database_principals 之间有什么联系?
I would like to make a query for database user roles for all databases in my sql server instance. I modified a query from sp_helpuser:
select u.name
,case when (r.principal_id is null) then 'public' else r.name end
,l.default_database_name
,u.default_schema_name
,u.principal_id
from sys.database_principals u
left join (sys.database_role_members m join sys.database_principals r on m.role_principal_id = r.principal_id)
on m.member_principal_id = u.principal_id
left join sys.server_principals l on u.sid = l.sid
where u.type <> 'R'
How can I modify this to query from all databases? What is the link between sys.databases and sys.database_principals?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用存储过程
sp_msforeachdb
添加一列作为数据库名称,并为数据库名称添加一个 [?] 占位符,然后在
sp_msforeachdb
存储过程中执行脚本,如下所示:要将所有这些都放在一个表中,您必须创建一个数据库中的一张表,我们将使用
master
作为示例。在
master
数据库中创建表然后只需将插入语句添加到查询的开头
您必须为
Insert
语句指定数据库名称,否则它将尝试插入数据存入当前数据库。You could use the stored procedure
sp_msforeachdb
Add a column for the database name and a [?] placeholder for the the database name and then execute the script within the
sp_msforeachdb
stored proc like this:To get this all in one table you would have to create a table in one database, we'll use the
master
as an example.Create the table in the
master
databaseThen simply add the insert statement to the start of the query
You must specify the database name for the
Insert
statement otherwise it will try to insert the data into the current database.