链接服务器的安全性

在链接服务器的连接过程(如处理分布式查询时)中,发送服务器提供登录名和密码以代表自己连接到接收服务器。为了使该连接有效,必须使用 SQL Server 系统存储过程在链接服务器之间创建登录名映射。

链接服务器登录名映射可以使用 sp_addlinkedsrvlogin 进行添加,使用 sp_droplinkedsrvlogin 进行删除。链接服务器登录名映射为指定的链接服务器和本地登录名建立远程登录名和远程密码。在 SQL Server 连接到链接服务器以执行分布式查询或存储过程时,SQL Server 将查找正在执行查询或存储过程的当前登录名的登录名映射。如果有一个登录名映射,则 SQL Server 在连接到链接服务器时将发送相应的远程登录名和密码。

例如,使用远程密码 8r4li034j7$ 为链接服务器 S1 建立了一个从本地登录名 U1 到远程登录名 U2 的映射。在本地登录名 U1 执行访问链接服务器 S1 中存储的表的分布式查询时,如果 SQL Server 连接到链接服务器 S1,则将 U2 和 8r4li034j7$ 分别作为用户 ID 和密码进行传递。

链接服务器配置的默认映射模拟了登录名的当前安全凭据。这类映射称为自映射。如果使用 sp_addlinkedserver 添加链接服务器,则将为所有本地登录名添加默认自映射。如果安全帐户委托可用且链接服务器支持 Windows 身份验证,则支持经过 Windows 身份验证的登录名的自映射。

注意注意

请尽可能使用 Windows 身份验证。

如果在客户端或发送服务器上安全帐户委托不可用,或链接服务器/访问接口不能识别 Windows 身份验证模式,则自映射对使用 Windows 身份验证的登录名不起作用。因此,必须建立一个从使用 Windows 身份验证的登录名到链接服务器上不使用 Windows 身份验证的特定登录名的本地登录名映射。在这种情况下,如果链接服务器是 SQL Server 实例,则远程登录名使用 SQL Server 身份验证。

分布式查询受限于链接服务器授予远程登录名的对远程表的权限。但是,SQL Server 在编译时不执行任何权限验证。访问接口在查询执行时检测并报告任何违反权限的行为。

注意注意

若要在某一链接服务器上使用表时创建最佳查询计划,查询处理器必须具有来自该链接服务器的数据分布统计。对表的任何列具有有限权限的用户可能没有足够的权限来获取所有有用的统计,并且可能会收到效率较低的查询计划和经历不佳的性能。如果链接服务器是 SQL Server 的实例,若要获取所有可用的统计,用户必须拥有该表,或者是链接服务器上 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。

测试链接服务器

在对象资源管理器中,右键单击链接服务器,然后单击**“测试连接”**。