远程服务器的安全性

若要为远程服务器启用远程过程调用 (RPC),必须在远程服务器中设置登录映射,并尽可能在运行有 SQL Server 实例的本地服务器中设置登录映射。默认情况下,SQL Server 中禁用 RPC。此配置通过减少服务器的可攻击外围应用来增强其安全性。使用 RPC 前必须启用此功能。有关详细信息,请参阅sp_configure (Transact-SQL)

注意注意

支持远程服务器只是为了实现向后兼容性。而必须对 SQL Server 的远程实例执行存储过程的新应用程序应该使用链接服务器。有关详细信息,请参阅链接服务器

设置远程服务器

必须在远程服务器上设置远程登录映射。使用这些映射,远程服务器可将某个特定服务器为建立 RPC 连接而传入的登录帐户映射到本地登录帐户。可以使用 sp_addremotelogin 存储过程在远程服务器上设置远程登录映射。

注意注意

SQL Server 不支持 sp_remoteoptiontrusted 选项。

设置本地服务器

对于经过 SQL Server 身份验证的本地登录帐户,不必在本地服务器上设置登录映射。SQL Server 使用本地登录名和密码连接到远程服务器。对于经过 Windows 身份验证的登录帐户,可以在定义 SQL Server 实例与远程服务器建立 RPC 连接时使用的登录名和密码的本地服务器上设置本地登录映射。

对于 Windows 身份验证创建的登录帐户,必须使用 sp_addlinkedservlogin 存储过程创建到登录名和密码的映射。此登录名和密码必须与远程服务器预期的传入登录名和密码(由 sp_addremotelogin 所创建)相匹配。

注意注意

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

远程服务器安全性示例

以下列SQL Server 实例为例:serverSendserverReceive。配置 serverReceive 以将传入帐户从 serverSend(称为 Sales_Mary)映射到 serverReceive(称为 Alice)中的经过 SQL Server 身份验证的登录帐户。将另一个传入帐户从 serverSend(称为 Joe)映射到 serverReceive(称为 Joe)中的经过 SQL Server 身份验证的登录帐户。

下面的 Transact-SQL 代码示例将 serverSend 配置为对 serverReceive 执行 RPC。

--Create remote server entry for RPCs 
--from serverSend in serverReceive.
EXEC sp_addserver 'serverSend'
GO

--Create remote login mapping for login 'Sales_Mary' from serverSend
--to Alice.
EXEC sp_addremotelogin 'serverSend', 'Alice', 'Sales_Mary'
GO
--Create remote login mapping for login Joe from serverReceive 
--to same login.
--Assumes same password for Joe in both servers.
EXEC sp_addremotelogin 'serverSend', 'Joe', 'Joe'
GO

在 serverSend上,创建从经过 Windows 身份验证的登录帐户 Sales\Mary 到登录帐户 Sales_Mary 的本地登录映射。Joe 不需要本地映射,因为默认设置使用相同的登录名和密码,并且 serverReceive 中有 Joe 的映射。

--Create a remote server entry for RPCs from serverReceive.
EXEC sp_addserver 'serverReceive'
GO
--Create a local login mapping for the Windows authenticated login.
--Sales\Mary to Sales_Mary. The password should match the
--password for the login Sales_Mary in serverReceive.
EXEC sp_addlinkedsrvlogin 'serverReceive', false, 'Sales\Mary',
   'Sales_Mary', '430[fj%dk'
GO