【问题标题】:How to check if user has create database access in SQL Azure?如何检查用户是否在 SQL Azure 中创建了数据库访问权限?
【发布时间】:2016-08-31 21:51:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可能会在这里得到答案:stackoverflow.com/questions/31120912/…
  • @MartinParkin 不幸的是,该查询似乎没有多大帮助。我在处理创建数据库的权限列表中看不到任何内容
  • 您正在尝试通过 T-SQL 查询 Azure 权限?
  • @drediske 没错
  • 好的。离开会议后,我会以这种方式回答。

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


【解决方案1】:

我相信这应该可以满足您的需求。如果当前登录具有 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;

【讨论】:

  • 没有为我返回任何东西。有什么我想念的吗?我可以创建数据库没问题,所以大概我会担任那个角色?
【解决方案2】:

第一:应该让您尽可能接近您在服务器上寻找的具体内容的查询:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2016-01-29
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2015-11-13
    相关资源
    最近更新 更多