我正在尝试链接两个运行在两个单独的(!)Active Directory域中的SQL Server(2008R2和2014)。
问题是我只能使用远程域中的Windows帐户登录远程服务器。因此,挑战是将凭据传递给远程服务器,但在这里我被卡住了。
dom8
,服务器:dom8\sql2008
,SQL(!)登录:localuser
dom14
,服务器:dom14\sql20148
,Windows(!)登录:dom14\import
服务器dom8\sql2008
想要连接到dom14\sql2014
以便提取一些数据。
以下是我在本地服务器上尝试过的内容:(以dom8\sql2008
身份登录sa
):
-- Create a credential for the remote Windows login:
create credential cred_import WITH IDENTITY= 'dom14\user14',
SECRET = 'password' ;
-- Alter the local SQL login and add the created credential:
alter login local_user with credential = cred_import ;
-- Create the Linked Server entry:
exec sp_addlinkedserver
@server='dom14\sql2014',
@srvproduct='SQL Server'
-- Add the credential to the linked server:
exec sp_addlinkedsrvlogin
@rmtsrvname ='dom14\sql2014',
@useself = 'FALSE',
@locallogin=local_user,
@rmtuser = [cred_import], -- trying to pass on the credential
@rmtpassword = NULL
然而,它不起作用。每当用户localuser
尝试通过本地服务器连接到远程服务器时,就会出现错误login failed
。
顺便说一句,我可以使用SQL Server Studio连接到远程域,如下所示:
runas /netonly /user:dom14\user14 "C:\...\Ssms.exe"
显然,我可以在本地创建远程端的凭据。只有远程服务器链接不起作用。
答案 0 :(得分:0)
您将需要两个域之间的信任,以便使用域B密码登录到域A机器。
一旦建立了信任关系,您就可以转到域A机器,并向域B用户ID授予执行您想做的事情所需的权限。
但是,它看起来更像是您尝试使用本地帐户,而不是基于脚本的域帐户。我怀疑您引用域的方式是服务器本身,而不是服务器本身。
查看行:
-- Create a credential for the remote Windows login:
create credential cred_import WITH IDENTITY= 'dom14\user14',
SECRET = 'password' ;
DOM14是您的域的名称吗?还是您尝试连接的服务器名称?
exec sp_addlinkedserver
@server='dom14\sql2014',
@srvproduct='SQL Server'
另一个域中的服务器为 XYZ.DOMAIN.COM ,其中XYZ是实际的服务器名称,domain.com是该服务器所在的域。此外,您还需要确保服务器有权读取其他域的DNS表。
从服务器A,您应该能够转到CMD提示符并按名称ping其他服务器(根据后缀搜索列表,可能需要FQDN)。只要返回服务器的IP地址,就不必担心ping是否失败。如果您没有获得IP地址,则域之间存在一个更基本的名称解析问题(您可能需要域A的DNS服务器中的转发器,将域B的名称指向域B中的DNS服务器),反之亦然( A到B,B到A等)。