TSQL:列出附加到 Azure SQL 服务器的所有数据库中的所有用户

TSQL: List all users in all databases attached to an Azure SQL Server

我知道我可以访问每个单独的数据库 运行:

SELECT name AS username FROM sys.sysusers

这让我获得了该 Azure SQL 数据库的用户列表。

从 Azure SQL 服务器上的主数据库,我可以 运行:

SELECT name AS databasename FROM dbo.sysdatabases

但是对于 Azure,我无法弄清楚的是如何遍历所有数据库,并为每个数据库列出其用户。

我显然无法为 USE @databasename 创建循环,因为 USE 不适用于 Azure SQL 数据库。

我能做的最好的事情就是编写代码来创建代码。我遍历了数据库并为每个数据库打印了一个字符串到 运行 sqlcmd。显然不理想,但这是我能想到的最好的。

对于遍历 Azure SQL 服务器上的所有 Azure SQL 数据库并在每个数据库上执行 运行ning 命令,有没有人有更好的建议?

在这种情况下,您需要遍历每个数据库以 运行 您想要的 T-SQL 但是,我确实有一个您可能会觉得有用的查询示例。

由于您希望在每个数据库的基础上获取所有用户的列表,而不一定要在每个数据库中查找 loginuser 的出现次数,因此该脚本还将为您提供 username 值以及与身份验证方法有关的 authenitcation_typetype 值用户的主要类型。随着组织从传统的 SQL Login/User 类型帐户转向托管目录原则和身份组,此信息非常有用。这种情况可能适用于您的情况,也可能不适用,但我想我会分享:

select name as username,
   create_date,
   modify_date,
   type_desc as type,
   authentication_type_desc as authentication_type
from sys.database_principals
where type not in ('A', 'G', 'R')
   and sid is not null
order by username;

可以在 [Bart Gawrych1 that is appropriately titled: List users in Azure SQL database

撰写的博客上找到此示例和其他信息

注意:他的示例不包括 Type = X,我已将其修改为包括 External_UserExternal_Group 用户 type 值....只是为了提高认识。

此致, 麦克