如何检查当前用户是否有权在SQL Azure中创建数据库?
在常规SQL Server中,我可以使用各种简单的方法来检查这一点。通常,我可能会使用IS_SRVROLEMEMBER('dbcreator')
。显然,SQL Azure具有dbmanager
角色,但IS_SRVROLEMEMBER('dbmanager')
也不起作用。
我也试过HAS_PERMS_BY_NAME(null, null, 'CREATE ANY DATABASE')
,但这也不起作用。
我已经确认我确实有权创建数据库。有没有人有建议?
答案 0 :(得分:0)
我相信这应该做你想要的。如果当前登录具有dbmanager角色,它将返回“1”。您需要在master数据库中执行此操作。
SELECT 1 AS DatabaseManager
FROM sys.database_role_members rm
JOIN sys.database_principals r
ON rm.role_principal_id = r.principal_id
JOIN sys.database_principals m
ON rm.member_principal_id = m.principal_id
WHERE r.name = 'dbmanager' and m.name = CURRENT_USER;
答案 1 :(得分:0)
首先:该查询应尽可能让您尽可能接近您在服务器上寻找的内容:
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是数据库级别权限,只能是 在master数据库中授予。对于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