查询链接服务器时登录失败
Login failed when querying linked server
我正在尝试在 SQL 服务器中创建链接服务器:
--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver
@server = N'uranium',
@srvproduct=N'',
@provider=N'SQLNCLI'
--Add the catch-all login with SQL Server authentication
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'uranium',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'BatteryStaple',
@rmtpassword='Horsecorrect'
而且效果很好。但是任何查询链接服务器的尝试,例如:
SELECT * FROM uranium.Periodic.dbo.Users
结果
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'BatteryStaple'.
除非我知道凭据是正确的:
- 登录:
BatteryStaple
- 密码:
Horsecorrect
因为我可以在使用 SQL Server Management Studio 或任何其他能够连接到数据库的技术直接连接时登录。
红利阅读
- Login Failed for linked server(他忘了打电话给
sp_addlinkedsrvlogin
)
- Why am I getting a “login failed” when creating this linked server? (他正在尝试使用集成身份验证)
- MSDN 博客:SQL Linked Server Query failed with “Login failed for user …”(他正在尝试使集成身份验证工作)
注意:新 SQL Server 2014 安装。每个现有 SQL 2000、2005、2008、2008 R2 都可以与其 uranium
链接服务器通信。我确定这与微软令人沮丧的 broken by default policy.
有关
问题是 SQL Server Management Studio 界面使用 OLEDB Provider 创建了链接服务器:
这个相当于原来的T-SQL:
--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver
@server = N'uranium',
@srvproduct=N'', @provider=N'SQLNCLI'
修复方法是将链接服务器创建为 SQL Server:
--Create the link to SQL Server "uranium"
EXEC master.dbo.sp_addlinkedserver
@server = N'uranium',
@srvproduct=N'SQL Server'
应该没关系。可能是 Microsoft SQL Server 2014 12.0.4213.0 中的回归。可能会在服务包中修复 - 如果有的话。
但是它就在那里;解决了。
旧 post,但可能仍然有用。在我的例子中,只设置了 Windows 身份验证。为链接服务器上的 Windows 和 SQL 服务器设置身份验证修复了它。
我的问题是:由于我试图通过 servername\instancename 连接到实例 - 我的所有实例都在端口 1433 上 运行 所以“添加链接服务器”实际上连接到默认实例 - 登录失败。
- 转到 SQL 配置管理器
- 单击 [instancename] 的协议
- 打开 TCP/IP 属性并确保它已启用并转到“IP 地址”选项卡并更改您用于链接服务器的所有 IP 上的端口 IP 是 (a) 活动的并且 (b ) 使用一个唯一的端口——比如 14333(这很重要,因为我的 VPN IP 不是“活动的”)。
- 如果您的机器 运行 两者都是
,则您可能必须对 32 位和 64 位都执行此操作
- 不要忘记停止和启动实例
这是解决方法
我正在尝试在 SQL 服务器中创建链接服务器:
--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver
@server = N'uranium',
@srvproduct=N'',
@provider=N'SQLNCLI'
--Add the catch-all login with SQL Server authentication
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'uranium',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'BatteryStaple',
@rmtpassword='Horsecorrect'
而且效果很好。但是任何查询链接服务器的尝试,例如:
SELECT * FROM uranium.Periodic.dbo.Users
结果
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'BatteryStaple'.
除非我知道凭据是正确的:
- 登录:
BatteryStaple
- 密码:
Horsecorrect
因为我可以在使用 SQL Server Management Studio 或任何其他能够连接到数据库的技术直接连接时登录。
红利阅读
- Login Failed for linked server(他忘了打电话给
sp_addlinkedsrvlogin
) - Why am I getting a “login failed” when creating this linked server? (他正在尝试使用集成身份验证)
- MSDN 博客:SQL Linked Server Query failed with “Login failed for user …”(他正在尝试使集成身份验证工作)
注意:新 SQL Server 2014 安装。每个现有 SQL 2000、2005、2008、2008 R2 都可以与其 uranium
链接服务器通信。我确定这与微软令人沮丧的 broken by default policy.
问题是 SQL Server Management Studio 界面使用 OLEDB Provider 创建了链接服务器:
这个相当于原来的T-SQL:
--Create the link to server "uranium"
EXEC master.dbo.sp_addlinkedserver
@server = N'uranium',
@srvproduct=N'', @provider=N'SQLNCLI'
修复方法是将链接服务器创建为 SQL Server:
--Create the link to SQL Server "uranium"
EXEC master.dbo.sp_addlinkedserver
@server = N'uranium',
@srvproduct=N'SQL Server'
应该没关系。可能是 Microsoft SQL Server 2014 12.0.4213.0 中的回归。可能会在服务包中修复 - 如果有的话。
但是它就在那里;解决了。
旧 post,但可能仍然有用。在我的例子中,只设置了 Windows 身份验证。为链接服务器上的 Windows 和 SQL 服务器设置身份验证修复了它。
我的问题是:由于我试图通过 servername\instancename 连接到实例 - 我的所有实例都在端口 1433 上 运行 所以“添加链接服务器”实际上连接到默认实例 - 登录失败。
- 转到 SQL 配置管理器
- 单击 [instancename] 的协议
- 打开 TCP/IP 属性并确保它已启用并转到“IP 地址”选项卡并更改您用于链接服务器的所有 IP 上的端口 IP 是 (a) 活动的并且 (b ) 使用一个唯一的端口——比如 14333(这很重要,因为我的 VPN IP 不是“活动的”)。
- 如果您的机器 运行 两者都是 ,则您可能必须对 32 位和 64 位都执行此操作
- 不要忘记停止和启动实例
这是解决方法