我正在尝试链接两个运行在两个独立(!)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"
所以很明显我可以在本地创建远程端的凭证。只有远程服务器链接不起作用。
您将需要两个域之间的信任才能登录域具有域B密码的计算机。
一旦信任到位,您就可以转到域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等)。