我有一个带有多个数据库的SQL Server 2008实例,我正在编写一个C#应用程序来访问这些数据库。在这个应用程序中,最终用户可以选择他们想要连接的数据库。
我已经有服务器上所有数据库的列表,如何将该列表限制为用户可以登录的数据库?或者,我该如何查询该列表?
有很多数据库,但每个用户只能访问其中一些数据库,因此尝试连接和捕获异常可能不是一个好主意。
Fyi:服务器仅配置为Windows身份验证,并且为Windows用户组(而非单个用户)创建了到服务器的登录。
答案 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
'用户名'