查询SQL Server登录名或确定登录名是否为SQL Azure上的管理员

查询SQL Server登录名或确定登录名是否为SQL Azure上的管理员,sql,azure,azure-sql-database,Sql,Azure,Azure Sql Database,我正在修改一个设计用于SQL Server数据库的应用程序,以用于Azure SQL数据库 该应用程序的大多数特性和功能似乎开箱即用,或者进行了一些小调整,但我遇到了以下问题: 该应用程序具有管理模式,允许用户使用具有服务器管理员权限的帐户登录,并在发布更新修补程序时执行数据库更新。应用程序当前使用该函数检查用户是否处于sysadmin或serveradmin角色 但是,在SQLAzure实例上,此方法始终返回0,而不管我在哪个用户上下文下执行它 所以问题是,如何确定当前登录名是否是Azure服

我正在修改一个设计用于SQL Server数据库的应用程序,以用于Azure SQL数据库

该应用程序的大多数特性和功能似乎开箱即用,或者进行了一些小调整,但我遇到了以下问题:

该应用程序具有管理模式,允许用户使用具有服务器管理员权限的帐户登录,并在发布更新修补程序时执行数据库更新。应用程序当前使用该函数检查用户是否处于
sysadmin
serveradmin
角色

但是,在SQLAzure实例上,此方法始终返回0,而不管我在哪个用户上下文下执行它


所以问题是,如何确定当前登录名是否是Azure服务器管理员?或者获取Azure管理员登录名列表(或登录名及其在服务器上的角色)?

我猜Azure数据库根本没有服务器角色(它只有登录名)。相反,您应该查询主数据库中的角色

SELECT m.name as [Member]
, r.name as [Role]
FROM sys.database_role_members as drm
INNER JOIN sys.database_principals as m
    on drm.member_principal_id = m.principal_id
INNER JOIN sys.database_principals as r
    on drm.role_principal_id = r.principal_id
确保在主数据库上执行它。请记住,不能使用“use[dbname]”语句。“master”应该在连接字符串中


Azure SQL server和Azure SQL DW的服务器管理员权限未反映为数据库主体。相反,登录的管理员用户是数据库的
dbo
用户。 因此,为了确定用户是
sysadmin
还是
serveradmin
您只需查询
选择当前用户
并将结果与
dbo
进行比较