일부 데이터를 db에 저장하는 웹 서비스를 만들었습니다. 하지만이 오류가 발생합니다.
로그인에서 요청한 "테스트"데이터베이스를 열 수 없습니다. 로그인에 실패했습니다. 'xyz \ ASPNET'사용자가 로그인하지 못했습니다.
내 연결 문자열은
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
일부 데이터를 db에 저장하는 웹 서비스를 만들었습니다. 하지만이 오류가 발생합니다.
로그인에서 요청한 "테스트"데이터베이스를 열 수 없습니다. 로그인에 실패했습니다. 'xyz \ ASPNET'사용자가 로그인하지 못했습니다.
내 연결 문자열은
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
답변:
글쎄요, 그 오류는 아주 분명합니다. "xyz / ASPNET"사용자로 SQL Server에 연결하려고합니다.이 계정은 ASP.NET 앱이 실행되는 계정입니다.
이 계정은 SQL Server에 연결할 수 없습니다. SQL Server에서 해당 계정에 대한 로그인을 생성하거나 연결 문자열에 다른 유효한 SQL Server 계정을 지정하십시오.
원래 질문을 업데이트하여 연결 문자열을 보여줄 수 있습니까?
업데이트 : 네, 통합 Windows 인증을 사용하고 있습니다-> SQL Server에서 "xyz \ ASPNET"에 대한 SQL Server 로그인을 생성하거나 연결 문자열을 다음과 같이 변경해야합니다.
connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"
데이터베이스에 암호가 "top $ secret"인 사용자 "xyz"가있는 경우.
두 번째 옵션을 선택하겠습니다. 오류 메시지는 기본 데이터베이스가 로그인으로 설정되지 않았거나 권한이 없음을 의미합니다.
로그인으로 설정되었는지 테스트하려면
SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)
NULL 인 경우
CREATE LOGIN [xyz\ASPNET] FROM WINDOWS
NULL이 아닌 경우
USE test
GO
SELECT USER_ID('xyz\ASPNET')
NULL 인 경우
USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]
나는이 문제가 있었고 그것을 해결 한 것은 다음과 같습니다.
로그인 문제에 대한 최상의 솔루션은 sqlServer에서 로그인 사용자를 만드는 것입니다. Windows 인증 (SQL Server Management Studio)을 사용하는 SQL Server 로그인을 만드는 단계는 다음과 같습니다.
예를 들어 사용자 이름이 xyz\ASPNET
이면이 이름을 로그인 이름 상자에 입력합니다.
또한 액세스하려는 데이터베이스에 액세스 할 수 있도록 사용자 매핑을 변경해야합니다.
대부분의 경우 로그인 문제가 아니라 데이터베이스 자체를 만드는 문제입니다. 따라서 데이터베이스를 생성하는 중에 오류가 발생하면 처음부터 생성되지 않습니다. 이 경우 사용자에 관계없이 로그인을 시도하면 로그인이 실패합니다. 이것은 일반적으로 db 컨텍스트의 논리적 오해로 인해 발생합니다.
브라우저에서 사이트를 방문하고 실제로 해당 오류 로그를 읽으면 코드 문제 (일반적으로 모델과 충돌하는 논리 문제)를 발견하는 데 도움이 될 수 있습니다.
제 경우에는 코드가 잘 컴파일되고 동일한 로그인 문제가 발생했습니다. 여전히 관리 스튜디오를 다운로드하는 동안 오류 로그를 살펴보고 db 컨텍스트 제약 조건을 수정하고 사이트가 정상적으로 실행되기 시작했습니다 .... 한편 관리 스튜디오는 여전히 다운로드 중입니다.
오류는 다음과 유사한 메시지로 나타납니다.
로그인에 의해 요청 된 "DATABASE NAME"데이터베이스를 열 수 없습니다. 로그인에 실패했습니다. 사용자 XYZ가 로그인하지 못했습니다.
솔루션은 다음 단계에 있습니다. 데이터베이스의 데이터를 잃지 않으며 데이터베이스 파일을 삭제해서는 안됩니다!
전제 조건 : SQL Server Management Studio (Full 또는 Express)를 설치해야합니다.
솔루션 소스 : https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
이것은 나를 위해 작동합니다.
이 블로그를 읽어보십시오.
Windows 인증을 사용하여 로컬 데이터베이스 .mdf 파일에 연결했고 내 로컬 서버는 SQL Server 2014였습니다. 내 문제는 다음 연결 문자열을 사용하여 해결되었습니다.
string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
제 경우에는 다른 문제입니다. 데이터베이스가 단일 사용자 모드로 바뀌었고 데이터베이스에 대한 두 번째 연결에서이 예외가 표시되었습니다. 이 문제를 해결하려면 아래 단계를 따르십시오.
exec sp_who2
'my_db'데이터베이스에 대한 모든 연결을 찾습니다. KILL { session id }
세션 ID가 sp_who2에 나열된 SPID 인 곳 을 수행하여 모든 연결을 종료 합니다.USE MASTER;
EXEC sp_who2
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO
NB : Windows 서비스를 사용하여 웹 서비스를 호스팅하는 경우.
웹 서비스가 올바른 로그온 계정을 사용하여 SQL Server에 연결하는지 확인해야합니다.
내가 사용한 cyptus의 대답에서 영감을 얻었습니다.
_dbContext.Database.CreateIfNotExists();
첫 번째 데이터베이스 연결 전 (DB 시드 전) EF6에서.
서버에 데이터베이스를 생성하지 않은 경우 동일한 로그인 오류가 발생하므로 로그인하기 전에 데이터베이스가 있는지 확인하십시오.
asp.net mvc 템플릿에 제공된 기본 데이터베이스에 쓰려고 할 때이 문제가 발생했습니다. 이것은 데이터베이스가 아직 생성되지 않았기 때문입니다.
데이터베이스를 만들고 액세스 할 수 있는지 확인하려면 다음 단계를 따르십시오.
이렇게하면 필요한 모든 마이그레이션을 실행하는 데이터베이스가 생성됩니다.
다른 SQL 서버에서이 db를 열고 (예 : sql managment studio (SMS)를 시작하고이 db를 추가하는 경우)이 서버를 중지하는 것을 잊어 버리면이 문제가 나타날 수 있습니다. 결과적으로 앱은 다른 서버에서이 DB에 이미 연결된 사용자와 연결을 시도합니다. 이 문제를 해결하려면 Config로이 서버를 중지하십시오. 디스패처 SQL 서버.
나쁜 영어에 대해 사과드립니다. 감사합니다, Ignat.
제 경우에는 asp.net 응용 프로그램이 일반적으로 문제없이 데이터베이스에 연결할 수 있습니다. 나는 로그에서 그러한 메시지를 발견했습니다. 나는 SQL 서버 로그를 켜 나는이 메시지를 찾을 수 있습니다 :
2016-10-28 10:27:10.86 Logon Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.
따라서 서버가 다시 시작되고 SQL 서버가 ASP.NET 응용 프로그램보다 조금 일찍 종료되었으며 서버가 다시 시작되기 전에 데이터베이스를 몇 초 동안 사용할 수 없었던 것 같습니다.
제 경우에는 "시스템"ID로 Windows 서비스를 실행하고있었습니다. 오류는 다음과 같습니다.
System.Data.SqlClient.SqlException (0x80131904):
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.
문제는 오류가 매우 오해의 소지가 있다는 것입니다. 데이터베이스에 'MYDOMAINNAME \ HOSTNAME $'로그인을 추가하고이 로그인 sysadmin 액세스 권한을 부여하고 대상 데이터베이스에 해당 로그인에 대한 사용자를 추가하고 해당 사용자를 dbowner로 만든 후에도 여전히 동일한 오류가 발생했습니다. 분명히 'NT AUTHORITY \ SYSTEM'로그인에 대해 동일한 작업을 수행해야했습니다. 그 후 문제없이 로그인 할 수있었습니다. 오류 메시지가 'MYDOMAINNAME \ HOSTNAME $'에 대해 불평하는 이유를 모르겠습니다. 해당 로그인과 해당 사용자를 삭제했지만 모든 것이 여전히 작동합니다.