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

3 浏览
0 Comments

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

如何检查当前用户是否有权限在SQL Azure中创建数据库?\n在常规的SQL Server中,我有各种简单的方法可以检查这个。通常,我可以使用IS_SRVROLEMEMBER(\'dbcreator\')。显然,SQL Azure有一个dbmanager角色,但IS_SRVROLEMEMBER(\'dbmanager\')也不起作用。\n我还尝试了HAS_PERMS_BY_NAME(null, null, \'CREATE ANY DATABASE\'),但也不起作用。\n我已经验证了我确实有创建数据库的权限。有人有建议吗?

0
0 Comments

这是一个关于如何检查用户是否具有在SQL Azure中创建数据库访问权限的问题。通过执行以下代码可以实现此目的,如果当前登录用户具有dbmanager角色,则会返回"1"。需要在主数据库中执行此操作。

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;

对我来说没有返回任何结果。可能是我漏掉了什么吗?我可以轻松创建数据库,所以我应该具有这个角色吧?

解决方法:检查是否有返回结果,如果没有返回结果,则可能是当前登录用户没有dbmanager角色。确保在执行代码时连接到正确的数据库,并且当前登录用户具有所需的权限。

0
0 Comments

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

首先,我们可以使用以下查询来尽可能接近您在服务器上寻找的内容:

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';  

从SQL Server的RBAC海报中了解到:

注意:CREATE DATABASE是一个只能在master数据库中授予的数据库级权限。对于SQL数据库,请使用dbmanager角色。

从Azure SQL数据库的CREATE DATABASE文档中了解到:

要创建数据库,登录必须是以下之一:

- 服务器级主体登录

- 本地Azure SQL服务器的Azure AD管理员

- dbmanager数据库角色的成员

您可以将db_owner修改为此页面上的任何角色 - 这是Azure特定的角色:

dbmanager 可以创建和删除数据库。创建数据库的dbmanager角色成员将成为该数据库的所有者,从而允许该用户作为dbo用户连接到该数据库。dbo用户在数据库中具有所有数据库权限。dbmanager角色的成员不一定具有访问他们不拥有的数据库的权限。

重要提示:您可能混淆了两个不同的基于角色的访问控制级别。SQL RBAC和Azure RBAC都与SQL Server/SQL DB有一定的关系。在某种程度上,它们是相关的,但不是同一回事。例如:通过门户能够创建数据库与通过连接到服务器创建数据库是不同的;可以为Azure用户提供创建数据库的能力,而该用户没有连接到服务器的有效登录凭据(如果Azure RBAC和SQL RBAC相同,则不会成立)。

具有SQL DB Contributor或SQL Server Contributor角色的用户将能够在不连接到数据库的情况下创建数据库。您可以在这里查看如何通过PowerShell命令轻松审核Azure的RBAC:

Get-AzureRmRoleAssignment -ResourceGroupName  
-ResourceType Microsoft.Sql/servers -ResourceName  
-IncludeClassicAdministrators

0