远程服务器的安全性
若要为远程服务器启用远程过程调用 (RPC),必须在远程服务器中设置登录映射,并尽可能在运行有 SQL Server 实例的本地服务器中设置登录映射。默认情况下,SQL Server 中禁用 RPC。此配置通过减少服务器的可攻击外围应用来增强其安全性。使用 RPC 前必须启用此功能。有关详细信息,请参阅sp_configure (Transact-SQL)。
注意 |
---|
支持远程服务器只是为了实现向后兼容性。而必须对 SQL Server 的远程实例执行存储过程的新应用程序应该使用链接服务器。有关详细信息,请参阅链接服务器。 |
设置远程服务器
必须在远程服务器上设置远程登录映射。使用这些映射,远程服务器可将某个特定服务器为建立 RPC 连接而传入的登录帐户映射到本地登录帐户。可以使用 sp_addremotelogin 存储过程在远程服务器上设置远程登录映射。
注意 |
---|
SQL Server 不支持 sp_remoteoption 的 trusted 选项。 |
设置本地服务器
对于经过 SQL Server 身份验证的本地登录帐户,不必在本地服务器上设置登录映射。SQL Server 使用本地登录名和密码连接到远程服务器。对于经过 Windows 身份验证的登录帐户,可以在定义 SQL Server 实例与远程服务器建立 RPC 连接时使用的登录名和密码的本地服务器上设置本地登录映射。
对于 Windows 身份验证创建的登录帐户,必须使用 sp_addlinkedservlogin 存储过程创建到登录名和密码的映射。此登录名和密码必须与远程服务器预期的传入登录名和密码(由 sp_addremotelogin 所创建)相匹配。
注意 |
---|
请尽可能使用 Windows 身份验证。 |
远程服务器安全性示例
以下列SQL Server 实例为例:serverSend 和 serverReceive。配置 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