Eri*_*ith 7 sql-server linked-server
我使用以下内容在我的服务器上创建了一个链接服务器:
exec sp_addlinkedserver
@server=N'MyOldDB',
@srvproduct=N'',
@provider = N'SQLNCLI',
@datasrc=N'MYSERVER',
@catalog=N'TheDefaultDatabase';
Run Code Online (Sandbox Code Playgroud)
现在,尽管以下描述了如何确定登录凭据(来自 MSDN):
本地服务器上的所有登录名和链接服务器上的远程登录名之间的默认映射是通过执行 sp_addlinkedserver 自动创建的。默认映射说明 SQL Server 在代表登录名连接到链接服务器时使用本地登录名的用户凭据。这相当于执行 sp_addlinkedsrvlogin 并将链接服务器的 @useself 设置为 true,而不指定本地用户名。
我收到以下错误:
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时:
select top 10 * from MyOldDB.TheDefaultDatabase.dbo.Batches
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向吗?
您遇到的错误与登录无关。
这是在 SQL Server 尝试将 NT 登录令牌“传递”到远程服务器时引起的。它无权传递令牌。远程服务器会查找此信息,因为本地服务器与 Integrated Security 连接。
您需要为本地服务器配置“安全帐户委托”。
至于默认映射...
MSDN 所说的是,如果您在本地拥有“MyDomain\bob”,那么您将在本地“存储”一个名为“MyDomain\bob”的“虚拟”条目。2 台服务器之间没有协调 2 台服务器。这与运行此相同:
EXEC sp_addlinkedsrvlogin 'MyLinkedServer', @useself = 'TRUE';
Run Code Online (Sandbox Code Playgroud)
请注意,“MyDomain\MyGroup”没有被映射:只有离散的 NT 用户和 SQL 登录名。不是 NT 组。
这一切都在“链接服务器的安全性”中进行了描述
链接服务器配置的默认映射是模拟登录的当前安全凭据。这种映射称为自映射。当使用 sp_addlinkedserver 添加链接服务器时,会为所有本地登录添加默认的自映射。如果安全帐户委派可用且链接服务器支持 Windows 身份验证,则支持 Windows 身份验证登录的自映射。
...
如果客户端或发送服务器上的安全帐户委派不可用,或者链接的服务器/提供程序无法识别 Windows 身份验证模式,则自映射将不适用于使用 Windows 身份验证的登录。