如何为Linked Server用户授予查看存储过程列表的权限
问题原因
SSMS 原生设计中,链接服务器的对象资源管理器节点默认仅展示远程实例的表、视图两类对象,不会内置存储过程的展示节点,你遇到的仅显示表和视图的情况属于正常默认行为,并非配置错误。
可行解决方案
方案1:T-SQL查询获取权限内存储过程列表
在源服务器执行以下查询,即可拉取到目标链接服务器上,你所使用的远程账号拥有执行权限的所有存储过程,执行前替换[你的链接服务器名称]、[目标数据库名]为实际值即可:
SELECT * FROM OPENQUERY([你的链接服务器名称], ' SELECT s.name AS 架构名, p.name AS 存储过程名 FROM [目标数据库名].sys.procedures p JOIN [目标数据库名].sys.schemas s ON p.schema_id = s.schema_id WHERE HAS_PERMS_BY_NAME(QUOTENAME(s.name) + ''.'' + QUOTENAME(p.name), ''OBJECT'', ''EXECUTE'') = 1 ')
你可以将该查询保存为SSMS自定义脚本,或创建成本地视图,方便后续随时查询。
方案2:通过已注册服务器直接访问目标实例(更适合高频使用场景)
直接将目标SQL Server添加到SSMS的已注册服务器列表,使用配置链接服务器时的远程账号密码进行身份验证,即可和访问本地实例一样,在对象资源管理器的「可编程性-存储过程」节点下,看到该账号有权限的所有存储过程,不需要依赖链接服务器的UI节点。
注意事项
- 不需要给远程账号额外授予
VIEW DEFINITION等超出执行需求的权限,上述方案1的查询已经通过系统函数HAS_PERMS_BY_NAME精准过滤出仅拥有执行权限的存储过程,符合最小权限原则。 - 目前SSMS原生不支持在链接服务器的UI树中新增存储过程展示节点,无相关配置项可开启该功能。
内容的提问来源于stack exchange,提问作者user2871239
相关产品推荐
相关产品推荐

