从链接服务器查询系统视图 - SQL Server

时间:2018-02-14 22:08:37

标签: sql-server tsql linked-server

我的任务是创建一个报告,该报告将从不同的服务器下载权限并显示它们。

我遇到的问题是查询没有从另一台服务器中获取系统视图中的所有行。

当我在serverA上运行以下查询时,它会给我251个结果。

SELECT COUNT(*) FROM ServerA.employee.sys.objects 

当我从ServerB运行相同的代码时,我得到153个结果。

我对两者进行了比较,看起来链接服务器不会type_desc SQL_SCALAR_FUNCTIONSQL_STORED_PROCEDURESYSTEM_TABLE

有没有人知道我可以获取从SQL服务器中的其他服务器运行的数据库对象权限列表?

1 个答案:

答案 0 :(得分:0)

如果您使用SSRS作为报告,则可以设置动态数据源以针对多个服务器/数据库运行相同的报告。我首先使用静态数据源来设置数据集,否则不会自动创建列。

="Data Source=" & Parameters!ServerName.Value & ";Initial Catalog=" & Parameters!DatabaseName.Value

以下是数据库中架构对象的权限列表。

SELECT 
      pr.principal_id
    , pr.name
    , pr.type_desc
    , pr.authentication_type_desc
    , pe.state_desc
    , pe.permission_name
    , ObjectName = s.name + '.' + o.name  
FROM 
    sys.database_principals AS pr  
    INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id  
    INNER JOIN sys.objects AS o ON pe.major_id = o.object_id  
    INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id;

Microsoft Reference