第一:应该让您尽可能接近您在服务器上寻找的具体内容的查询:
SELECT sys.database_role_members.role_principal_id, role.name AS RoleName,
sys.database_role_members.member_principal_id, member.name AS MemberName
FROM sys.database_role_members
JOIN sys.database_principals AS role
ON sys.database_role_members.role_principal_id = role.principal_id
JOIN sys.database_principals AS member
ON sys.database_role_members.member_principal_id = member.principal_id
WHERE role.name = 'db_owner';
From the RBAC poster on SQL Server:
注意:CREATE DATABASE 是数据库级别的权限,只能
在主数据库中授予。对于 SQL 数据库,使用 dbmanager 角色
来自CREATE DATABASE (Azure SQL Database) 文档
要创建数据库,登录名必须是以下之一:
服务器级主体登录
本地 Azure SQL Server 的 Azure AD 管理员
作为 dbmanager 数据库角色成员的登录名
您可以将db_owner 编辑为任何role on this page - 这是天蓝色的特定角色:
dbmanager 可以创建和删除数据库。创建数据库的 dbmanager 角色的成员成为该数据库的所有者,这允许该用户以 dbo 用户身份连接到该数据库。 dbo 用户拥有数据库中的所有数据库权限。 dbmanager 角色的成员不一定有权访问他们不拥有的数据库。
重要提示:您可能已将两个不同的基于角色的访问控制级别交织在一起。 SQL RBAC 和 Azure RBAC 都与 SQL Server/SQL DB 有某种关系。这样,它们当然是相关的,但不是一回事。例如:能够通过门户创建数据库与能够在连接到服务器时创建数据库不同;可以为 Azure 用户提供创建数据库的能力,而该用户没有有效的登录名来连接到服务器。 (如果 Azure RBAC 和 SQL RBAC 相同,则情况并非如此。)
具有SQL DB Contributor 或SQL Server Contributor 角色的用户无需连接到数据库即可创建数据库。 I examined enumerating these roles in a partially related question here.
您将能够通过这个 powershell 命令最轻松地审核 Azure 的 RBAC:
Get-AzureRmRoleAssignment -ResourceGroupName <your resource group name>
-ResourceType Microsoft.Sql/servers -ResourceName <your server name>
-IncludeClassicAdministrators