Sql server 用户sql的登录失败

Sql server 用户sql的登录失败,sql-server,sql-server-2008,query-string,Sql Server,Sql Server 2008,Query String,我有一个从两个不同的服务器检索数据的查询,但一旦执行了该查询,就会出现此错误 用户“usr1”登录失败 我正在server1中运行查询,用户名为:usr1 select userid, m.name, Cardid, m.dircode, from [Server1].Database1.dbo.member m JOIN [Server2].Database2.dbo.GetUserDetails p on p.cprno = m.cardid WHERE PerUserNam

我有一个从两个不同的服务器检索数据的查询,但一旦执行了该查询,就会出现此错误

用户“usr1”登录失败

我正在server1中运行查询,用户名为:usr1

 select userid, m.name, Cardid, m.dircode, 
 from [Server1].Database1.dbo.member m
 JOIN [Server2].Database2.dbo.GetUserDetails p 
 on p.cprno = m.cardid 
 WHERE PerUserName='mftrame'
我已经在[Server2].Database2.dbo.GetUserDetails上提供了usr1读取权限

另外,我如何检查是否已从以下位置将指向server1的链接添加到server2中:

设置SQL Server安全身份验证时会出现此问题 仅适用于Windows,并且以下条件之一为真:您是 正在尝试使用SQL Server连接到SQL Server数据库 登录。[…]

您需要在另一台SQL Server上启用SQL Server登录。
最有可能的是,服务器当前只允许集成安全登录

还要与SSMS核实它是否真的有效
SQL Server帐户还需要具有访问数据库的权限

SELECT 
     ss.server_id
    ,ss.name
    ,ss.product
    ,ss.provider
    ,ss.data_source


    ,ss.is_linked
    ,ss.is_remote_login_enabled
    ,ss.is_rpc_out_enabled
    ,ss.is_data_access_enabled
    ,ss.uses_remote_collation

    ,ss.is_remote_proc_transaction_promotion_enabled

    ,ll.local_principal_id
    ,ll.uses_self_credential
    ,ll.remote_name

    ,sp.type_desc
    ,sp.default_database_name
    ,sp.default_language_name
FROM sys.linked_logins as ll 

LEFT JOIN sys.server_principals  as sp
    ON sp.[principal_id] = local_principal_id 

LEFT JOIN sys.servers AS ss 
    ON ss.server_id = ll.server_id
要启用混合模式身份验证,请执行以下操作:

USE master
/* Mixed Authenication script SR 01-14-10, can update SQL authentication for instances.
works with SQL 05/08 not tested with SQL 05 instances*/
DECLARE @INSTANCEID VARCHAR(30) 
DECLARE @STRVERSION VARCHAR(30)
DECLARE @SQLVERSION VARCHAR(30)
DECLARE @CMD VARCHAR(2000)
SET @SQLVERSION = (SELECT CONVERT(VARCHAR(20),(SERVERPROPERTY('productversion'))))
SET @INSTANCEID = ((SELECT CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)))

IF (SELECT REPLACE(LEFT(@SQLVERSION,2),'.','')) = 10 
BEGIN
SET @STRVERSION = 'MSSQL10'
END
ELSE
IF (SELECT REPLACE(LEFT(@SQLVERSION,2),'.','')) = 9
BEGIN
SET @STRVERSION = 'MSSQL'
END

IF @INSTANCEID IS NULL AND @STRVERSION = 'MSSQL'
BEGIN
SET @INSTANCEID = 1
END
ELSE
IF @INSTANCEID IS NULL AND @STRVERSION = 'MSSQL10'
BEGIN
SET @INSTANCEID = 'MSSQLSERVER'
END


SET @CMD = 'xp_regwrite ' + 'N' + '''HKEY_LOCAL_MACHINE''' + ',' + ' N' + '''Software\Microsoft\Microsoft SQL Server\'+ @STRVERSION +'.'+ @INSTANCEID + '\MSSQLServer'''+','+' N'+'''LoginMode'''+', '+'REG_DWORD'+','+ ' 2' --2 is mixed auth.

--EXEC(@CMD)
PRINT @CMD
--PRINT 'A restart of SQL is required for authentication changes to take effect'
也许一个例子确实有帮助:

访问服务器cordb2005上数据库目录CORU basic上的表t_用户 使用用户ApertureWebServicesDE(在cordb2005上)和密码MY_TOP_SECRET_password,您可以使用:

EXEC master.dbo.sp_addlinkedserver 
    @server = N'RemoteDB'
   ,@srvproduct = 'OLE DB Provider for SQL'
   ,@provider = N'SQLNCLI'
   ,@datasrc = 'CORDB2005'
   ,@catalog = 'COR_Basic'

GO

EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname = N'RemoteDB'
   ,@useself = false
   --,@locallogin = 'LocalIntegrationUser'
   ,@locallogin = NULL 
   ,@rmtuser = N'ApertureWebServicesDE'
   ,@rmtpassword = N'MY_TOP_SECRET_PASSWORD'
GO




select * 
from RemoteDB.COR_Basic.dbo.t_users 
当然,这是在CORDB2005上登录ApertureWebServicesDE有效,并且ApertureWebServicesDE有足够的权限访问数据库COR_Basic并对T_用户进行选择的先决条件

需要重新启动才能使上述更改生效!

是否已将服务器2添加为服务器1的链接服务器?您可以在SQL Server Management Studio中的“服务器对象->链接服务器”下看到这一点。是否使用正确的登录映射将服务器2添加到服务器1中的链接服务器?您是否尝试过将映射表保留为空并使用默认登录?您是否尝试过具有更高权限的用户?Server1是否可以访问Server2(防火墙、网络等)我还运行了以下exec sp_addlinkedsrvlogin'mofsql08r2 prod','true',现在我收到另一个错误,用户'NT AUTHORITY\匿名登录失败,我如何检查Server2是否可以访问Server1?必须这样添加它吗
EXEC master.dbo.sp_addlinkedsrvlogin@rmtsrvname=N'server2',@useself=N'False',@locallogin=NULL,@rmtuser=N'user1',@rmtpassword='password1'