【问题标题】:Listing database names from multiple databases that a user has access to列出用户有权访问的多个数据库中的数据库名称
【发布时间】:2018-02-20 05:05:33
【问题描述】:

我的主管要求我创建一个 ssrs 报告(使用 sql server 2008),该报告将显示用户有权访问的所有数据库名称,并确保该用户仍有一个活动帐户。我可以从不同的数据库中查询用户名,但我似乎无法列出用户有权访问的数据库名。

即使某些数据库位于不同的链接服务器中,有没有办法实现这一点。

提前感谢大家,非常感谢任何帮助我指出正确方向的人。

【问题讨论】:

    标签: sql sql-server-2008 reporting-services


    【解决方案1】:
    DECLARE @DBuser_table TABLE (DBName VARCHAR(200), 
            UserName VARCHAR(250), 
            LoginType VARCHAR(500), 
            AssociatedRole VARCHAR(200)) 
    DECLARE @UserName VARCHAR(250)
    
    SET @UserName = 'dbo' --change this to desired username
    
    SET @DBuser_sql='SELECT ''?'' AS DBName,a.name AS Name,a.type_desc AS LoginType,USER_NAME(b.role_principal_id) AS AssociatedRole FROM ?.sys.database_principals a 
    LEFT OUTER JOIN ?.sys.database_role_members b ON a.principal_id=b.member_principal_id 
    WHERE a.sid NOT IN (0x01,0x00) AND a.sid IS NOT NULL AND a.type NOT IN (''C'') AND a.is_fixed_role <> 1 AND a.name NOT LIKE ''##%'' AND ''?'' NOT IN (''master'',''msdb'',''model'',''tempdb'') ORDER BY Name'
    
    INSERT @DBuser_table 
    
    EXEC sp_MSforeachdb @command1=@DBuser_sql 
    
    SELECT * 
      FROM @DBuser_table 
     WHERE username = @UserName
     ORDER BY DBName 
    

    【讨论】:

    • 谢谢你,Ferdinand,我已经运行了这个,但似乎无法连接来自其他服务器的所有数据库,这些服务器链接在一起以显示用户有权访问的所有表。跨度>
    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多