如何检查用户是否在SQL Azure中创建了数据库访问权限?

时间:2016-08-31 21:51:30

标签: sql-server tsql azure-sql-database

如何检查当前用户是否有权在SQL Azure中创建数据库?

在常规SQL Server中,我可以使用各种简单的方法来检查这一点。通常,我可能会使用IS_SRVROLEMEMBER('dbcreator')。显然,SQL Azure具有dbmanager角色,但IS_SRVROLEMEMBER('dbmanager')也不起作用。

我也试过HAS_PERMS_BY_NAME(null, null, 'CREATE ANY DATABASE'),但这也不起作用。

我已经确认我确实有权创建数据库。有没有人有建议?

2 个答案:

答案 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 ContributorSQL 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
相关问题