我的任务是创建一个报告,该报告将从不同的服务器下载权限并显示它们。
我遇到的问题是查询没有从另一台服务器中获取系统视图中的所有行。
当我在serverA
上运行以下查询时,它会给我251
个结果。
SELECT COUNT(*) FROM ServerA.employee.sys.objects
当我从ServerB
运行相同的代码时,我得到153
个结果。
我对两者进行了比较,看起来链接服务器不会type_desc
SQL_SCALAR_FUNCTION
,SQL_STORED_PROCEDURE
和SYSTEM_TABLE
。
有没有人知道我可以获取从SQL服务器中的其他服务器运行的数据库对象权限列表?
答案 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;