获取用户有权访问的数据库列表

时间:2009-11-11 12:05:53

标签: sql-server

我有一个带有多个数据库的SQL Server 2008实例,我正在编写一个C#应用程序来访问这些数据库。在这个应用程序中,最终用户可以选择他们想要连接的数据库。

我已经有服务器上所有数据库的列表,如何将该列表限制为用户可以登录的数据库?或者,我该如何查询该列表?

有很多数据库,但每个用户只能访问其中一些数据库,因此尝试连接和捕获异常可能不是一个好主意。

Fyi:服务器仅配置为Windows身份验证,并且为Windows用户组(而非单个用户)创建了到服务器的登录。

3 个答案:

答案 0 :(得分:21)

您可以从sys.sysdatabases查询所有数据库,并检查用户是否具有HAS_DBACCESS访问权限:

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

答案 1 :(得分:0)

也许作为Andomars的替代方案(我喜欢!),您可以查询Active Directory以查看用户是否是数据库的有效组的成员。我怀疑这意味着你必须维护一些Windows组到数据库名称查找。

答案 2 :(得分:-1)

您可以使用系统存储过程sp_helplogins'用户名'