2009-11-11 74 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“用户名”

相关问题