如何检查用户是否具有在 SQL Azure 中创建数据库访问权限?
如何检查用户是否具有在 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我已经验证了我确实有创建数据库的权限。有人有建议吗?
这是一个关于如何检查用户是否具有在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角色。确保在执行代码时连接到正确的数据库,并且当前登录用户具有所需的权限。
如何检查用户是否在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