2009-11-11 73 views
7

我有一個SQL Server 2008實例與幾個數據庫,我目前正在編寫一個C#應用程序來訪問這些數據庫。在這個應用程序中,最終用戶可以選擇他們想要連接的數據庫。獲取用戶有權訪問的數據庫列表

我已經有了服務器上所有數據庫的列表,我怎麼能限制那個列表到用戶可以登錄到的那些數據庫?或者,我如何查詢該列表?

有很多數據庫,但每個用戶只能訪問其中的一部分,因此試圖連接並捕獲異常可能不是一個好主意。 Fyi:僅爲Windows身份驗證配置服務器,並且爲Windows用戶組(而不是個人用戶)創建登錄服務器。

回答

16

您可以從sys.sysdatabases查詢所有數據庫,並檢查用戶是否有HAS_DBACCESS訪問:

SELECT name 
FROM sys.sysdatabases 
WHERE HAS_DBACCESS(name) = 1 
+0

有沒有一種方式來擴大該查詢到包括在鏈接服務器上的數據庫系統? – 2014-12-16 21:14:05

0

也許作爲替代Andomars答案(我喜歡!),你可以詢問Active Directory來看看該用戶是您數據庫的有效組的成員。我懷疑這意味着你將不得不維護一些Windows組到數據庫名稱的查找。

-1

您可以使用存儲過程sp_helplogins「用戶名」

相關問題