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

Posted

技术标签:

【中文标题】SQL Server 2008 查找特定用户拥有的数据库【英文标题】:SQL server 2008 finding databases owned by a specific user 【发布时间】:2014-02-21 04:12:39 【问题描述】:

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

            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】:

您可以使用此查询(来自 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

【讨论】:

谢谢,但它给了'sa'作为用户,我怎样才能找到我的用户的正确名称? 定义“正确”?除了“所有权”关系之外,您还需要什么? (如授予访问权限) 我的服务器有几个数据库(30多个),但是这个特殊用户(比如user1)只有一个数据库,我想只有这个数据库,但是好像'sa'作为所有数据库的用户名返回,我怎样才能找到我的数据库的用户名? 事实上,我将在 Visual Studio 中添加类似“添加连接”框的内容,输入服务器名称、用户名和密码(在 SQL 身份验证模式下),然后获得属于该用户的数据库跨度> 定义“有”?你怎么能人为地确定这个数据库是 users's 的数据库?我认为您现在所说的不是所有权,而是授予访问权限...我说得对吗?

以上是关于SQL Server 2008 查找特定用户拥有的数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2008 中找不到用户定义的函数

SQL Server2008 查找用户登录日志

新 SQL Server 用户登录失败

更新触发器 SQL Server 2008

在 SQL Server 2008 R2 中为特定数据库用户设置最大查询数

SQL Server 查询以查找数据库中所有用户的所有权限/访问权限