簡體   English   中英

查詢 SQL Server 登錄名或確定登錄名是否為 SQL Azure 上的管理員

[英]Query SQL Server logins or determine if login is admin on SQL Azure

我正在修改一個旨在與 SQL Server 數據庫一起使用的應用程序,以便與 Azure SQL 數據庫一起使用。

該應用程序的大多數特性和功能似乎開箱即用,或者進行了細微的調整,但我遇到了以下問題:

該應用程序具有管理模式,允許用戶使用具有服務器管理員權限的帳戶登錄,並在發布更新補丁時執行數據庫更新。 應用程序當前使用IS_SRVROLEMEMBER函數檢查用戶是否處於sysadminserveradmin角色。

但是,在 SQL Azure 實例上,此方法始終返回 0,無論我在何種用戶上下文下執行它。

那么問題來了,如何判斷當前登錄是否是Azure服務器管理員? 或者獲取 Azure 管理員登錄名(或登錄名及其在服務器上的角色)的列表?

我猜 Azure 數據庫根本沒有服務器角色(它只有登錄名)。 相反,您應該查詢 master 數據庫的角色。

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 登錄的更多信息

Azure SQL Server 和 Azure SQL DW 的服務器管理員權限未反映為數據庫主體。 相反,登錄的管理員用戶是數據庫的dbo用戶。 因此,為了識別用戶是sysadmin還是serveradmin您只需查詢SELECT current_user; 並將結果與dbo進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM