Eu tenho dois bancos de dados. O banco de dados A está em DBServer\Instance1 e o banco de dados B está em DBServer\Instance2. Preciso criar uma visão dentro do Banco de Dados B que examine uma tabela no Banco de Dados A. Disseram-me que preciso adicionar DBServer\Instance1 como um servidor vinculado a DBServer\Instance2 primeiro. Isso é o que estou tentando fazer.
Apenas para teste, criei uma conta de usuário chamada linked_server_acct
e dei a ela todas as funções em ambos os servidores (em Segurança > Logins). Posso fazer login em cada instância usando o SQL Management Studio, então sei com certeza que o login funciona, mas não consigo usá-lo por algum motivo ao criar os servidores vinculados. Ele falha com "especificação de autenticação inválida - 7399".
Não consigo pensar em um motivo pelo qual uma conta que é basicamente um superadministrador de um servidor não possa ser autenticada nele. Qualquer ajuda seria apreciada.
Script de servidor vinculado DBServer\Instance1:
/****** Object: LinkedServer [DBSERVER\INSTANCE1] Script Date:
06/17/2015 16:17:39 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'DBSERVER\INSTANCE1', @srvproduct=N'SQL Server'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'DBSERVER\INSTANCE1',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'DBSERVER\INSTANCE1',@useself=N'True',@locallogin=N'linked_server_acct',@rmtuser=NULL,@rmtpassword=NULL
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'DBSERVER\INSTANCE1', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
Descobri o problema. Embora o usuário que eu estava adicionando à seção de segurança do Linked Server tivesse permissões no banco de dados de destino, o usuário que eu estava conectado à instância do SQL Server no momento não tinha. Como a mensagem de erro é incrivelmente inútil (não diz qual usuário falhou ao fazer login), descobri isso totalmente por acidente.