SQL Server 2008查找特定用户拥有的数据库

时间:2014-01-29 11:27:37

标签: sql-server

我将创建类似Visual Studio" Add Connection"框,我的用户可以输入数据库服务器名称,用户名和&密码,然后他们可以获得可用数据库的列表(仅用于输入的用户名/密码),或者如果输入的信息不正确,则应显示错误。我使用了以下代码来返回服务器中的所有数据库:

            using (var con = new SqlConnection("Data Source=" + txtServername.Text + "; User ID=" + txtUsername.Text + ";Connect Timeout=200;pooling=false;Password=" + txtPassword.Text))
        {
            con.Open();
            DataTable databases = con.GetSchema("Databases");
            foreach (DataRow database in databases.Rows)
            {
                String databaseName = database.Field<String>("database_name");
                short dbID = database.Field<short>("dbid");
                DateTime creationDate = database.Field<DateTime>("create_date");
            }
        }

如何将结果限制为指定用户拥有的数据库?

1 个答案:

答案 0 :(得分:3)

您可以使用此查询(来自this article)并在owner_sid上添加您需要的WHERE子句:

SELECT name, SUSER_SNAME(owner_sid)
FROM   sys.databases

对于数据库授予的访问枚举,在that thread之后,您可以使用此查询,并添加所需的WHERE语句:

CREATE TABLE #tempww (
    LoginName nvarchar(max),
    DBname nvarchar(max),
    Username nvarchar(max), 
    AliasName nvarchar(max)
)

INSERT INTO #tempww 
EXEC master..sp_msloginmappings 'sa' -- REPLACE IT BY YOUR USERNAME PARAMETER

-- display results
SELECT DBname
FROM   #tempww 
WHERE LoginName='sa' -- REPLACE IT BY YOUR USERNAME PARAMETER
ORDER BY dbname, username

-- cleanup
DROP TABLE #tempww