로그인에서 요청한 데이터베이스 "테스트"를 열 수 없습니다. 로그인에 실패했습니다. 사용자 'xyz \ ASPNET'에 대한 로그인 실패


97

일부 데이터를 db에 저장하는 웹 서비스를 만들었습니다. 하지만이 오류가 발생합니다.

로그인에서 요청한 "테스트"데이터베이스를 열 수 없습니다. 로그인에 실패했습니다. 'xyz \ ASPNET'사용자가 로그인하지 못했습니다.

내 연결 문자열은

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

이 문제를 진단하려면 훨씬 더 많은 정보가 필요합니다.
sblom 2010

나는이 문제를 가지고 및 Visual Studio를 닫고 다시 열어이 .. 일을 시작
trees_are_great

답변:


47

글쎄요, 그 오류는 아주 분명합니다. "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"가있는 경우.


11
"SQL Server에 연결할 수 없습니다"가 아니라 "데이터베이스"테스트 "를 사용할 수 없습니다".
wRAR 2010

@wRAR : true-하지만 사용자 로그인이 서버에 존재하지만이 특정 데이터베이스에서 활성화되지 않은 가능성은 희박한 것 같습니다 (적어도 생각합니다)
marc_s

"Database = IFItest"vs "test"를 참조하십시오. 오류 일 수 있습니다.
wRAR

2
한 번도 다루지 않은 점은 DB 이름도 잘못되었을 수 있다는 것입니다. Azure SQL Server에서 예외 메시지를 보는 것과 같은 메시지가 표시되고 ASP.NET 프로젝트의 C # 코드에있는 연결 문자열 중 하나에서 DB에 잘못된 이름을 지정한 것으로 나타났습니다.
Ron16

론, 그게 내 문제 였어. 철자를 두 번 확인했지만 그때도 놓쳤습니다.
Darrell Lloyd Harvey

32
  • 다음 중 하나 : "xyz \ ASPNET"은 로그인이 아닙니다 (sys.server_principals에 있음).
  • 또는 : "xyz \ ASPNET"이 설정되었지만 데이터베이스 테스트 (sys.database_principals)의 사용자에 매핑되지 않았습니다.

두 번째 옵션을 선택하겠습니다. 오류 메시지는 기본 데이터베이스가 로그인으로 설정되지 않았거나 권한이 없음을 의미합니다.

로그인으로 설정되었는지 테스트하려면

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]

1
문제를 감지하고 해결하는 간단한 워크 플로입니다.
Mazen el Senih

12

나는이 문제가 있었고 그것을 해결 한 것은 다음과 같습니다.

  • IIS의 응용 프로그램 풀로 이동
  • 내 프로젝트 응용 프로그램 풀을 마우스 오른쪽 버튼으로 클릭하십시오.
  • 프로세스 모델 섹션에서 ID 열기
  • 사용자 지정 계정 옵션 선택
  • PC 사용자 이름과 암호를 입력하십시오.

나를 위해 일 했어!
Mazen el Senih

8

로그인 문제에 대한 최상의 솔루션은 sqlServer에서 로그인 사용자를 만드는 것입니다. Windows 인증 (SQL Server Management Studio)을 사용하는 SQL Server 로그인을 만드는 단계는 다음과 같습니다.

  1. SQL Server Management Studio에서 개체 탐색기를 열고 새 로그인을 만들 서버 인스턴스의 폴더를 확장합니다.
  2. 보안 폴더를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 로그인을 클릭합니다.
  3. 일반 페이지에서 로그인 이름 상자에 Windows 사용자 이름을 입력합니다.
  4. Windows 인증을 선택합니다.
  5. 확인을 클릭하십시오.

예를 들어 사용자 이름이 xyz\ASPNET이면이 이름을 로그인 이름 상자에 입력합니다.

또한 액세스하려는 데이터베이스에 액세스 할 수 있도록 사용자 매핑을 변경해야합니다.


8

대부분의 경우 로그인 문제가 아니라 데이터베이스 자체를 만드는 문제입니다. 따라서 데이터베이스를 생성하는 중에 오류가 발생하면 처음부터 생성되지 않습니다. 이 경우 사용자에 관계없이 로그인을 시도하면 로그인이 실패합니다. 이것은 일반적으로 db 컨텍스트의 논리적 오해로 인해 발생합니다.

브라우저에서 사이트를 방문하고 실제로 해당 오류 로그를 읽으면 코드 문제 (일반적으로 모델과 충돌하는 논리 문제)를 발견하는 데 도움이 될 수 있습니다.

제 경우에는 코드가 잘 컴파일되고 동일한 로그인 문제가 발생했습니다. 여전히 관리 스튜디오를 다운로드하는 동안 오류 로그를 살펴보고 db 컨텍스트 제약 조건을 수정하고 사이트가 정상적으로 실행되기 시작했습니다 .... 한편 관리 스튜디오는 여전히 다운로드 중입니다.


6

나를 위해 데이터베이스가 생성되지 않았고 EF 코드가 먼저 생성해야했지만 항상이 오류로 끝납니다. aspnet 코어 기본 웹 프로젝트에서 동일한 연결 문자열이 작동했습니다. 해결책은

_dbContext.Database.EnsureCreated()

첫 번째 데이터베이스 연결 전 (DB 시드 전).


4

문제

오류는 다음과 유사한 메시지로 나타납니다.

로그인에 의해 요청 된 "DATABASE NAME"데이터베이스를 열 수 없습니다. 로그인에 실패했습니다. 사용자 XYZ가 로그인하지 못했습니다.

  • 이 오류는 일반적으로 간단한 Visual Studio 또는 전체 컴퓨터 다시 시작으로 수정할 수 없습니다.
  • 오류는 잠긴 것처럼 보이는 데이터베이스 파일로도 발견 될 수 있습니다.

수정

솔루션은 다음 단계에 있습니다. 데이터베이스의 데이터를 잃지 않으며 데이터베이스 파일을 삭제해서는 안됩니다!

전제 조건 : SQL Server Management Studio (Full 또는 Express)를 설치해야합니다.

  1. SQL Server Management Studio 열기
  2. "서버에 연결"창 (파일-> 개체 탐색기 연결)에서 다음을 입력합니다.
    • 서버 유형 : 데이터베이스 엔진
    • 서버 이름 : (localdb) \ v11.0
    • 인증 : [로컬 db를 만들 때 사용한 모든 것. 아마도 Windows 인증).
  3. "연결"을 클릭하십시오.
  4. 개체 탐색기에서 "데이터베이스"폴더를 확장합니다 (보기-> 개체 탐색기, F8).
  5. 데이터베이스를 찾으십시오. 데이터베이스 (.mdf) 파일의 전체 경로로 이름을 지정해야합니다.
    • 데이터베이스 이름 끝에 "(Pending Recovery)"라는 메시지가 표시되거나 데이터베이스를 확장하려고 할 때 오류 메시지가 표시되거나 표시되지 않을 수 있습니다.
    • 이 문제! 데이터베이스가 본질적으로 충돌했습니다 ..
  6. 데이터베이스를 마우스 오른쪽 버튼으로 클릭 한 다음 "작업-> 분리 ..."를 선택합니다.
  7. 분리 창에서 목록에서 데이터베이스를 선택하고 "연결 끊기"열을 확인하십시오.
  8. 확인을 클릭하십시오.
  9. 데이터베이스 목록에서 데이터베이스가 사라지는 것을 볼 수 있습니다. 이제 문제가 해결되어야합니다. 가서 localdb를 사용하는 애플리케이션을 실행하십시오.
  10. 응용 프로그램을 실행하면 데이터베이스 목록에 데이터베이스가 다시 나타납니다. 맞습니다. 제대로 작동해야하므로 더 이상 "복구 보류 중"이라고 표시되지 않아야합니다.

솔루션 소스 : https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed


문제는 그 DB도 찾을 수 없다는 것입니다.
Shimmy Weitzhandler 2017

3

DB 이름을 잘못 입력 한 경우에도 발생합니다.

ex : xxx-db-dev to xxx-dev-db

때로는 어리석은 실수입니다. 나는 이것을 알아내는 데 약 1 시간 이상이 걸립니다 :( 먼저 어려운 일을 많이 시도하기 때문에


2

사용자를 업데이트하려고했는데 제대로 작동했습니다. 아래 명령을 참조하십시오.

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

user('ftool')그에 따라 교체하십시오 .


2

이것은 나를 위해 작동합니다.

  1. SQL Server >> 보안 >> 로그인으로 이동하고 NT AUTHORITY \ NETWORK SERVICE를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  2. 로그인 속성의 새로 열린 화면에서 "사용자 매핑"탭으로 이동합니다.
  3. 그런 다음 "사용자 매핑"탭에서 원하는 데이터베이스, 특히이 오류 메시지가 표시되는 데이터베이스를 선택합니다.
  4. 확인을 클릭하십시오.

이 블로그를 읽어보십시오.

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- user-nt-authoritynetwork-service /


감사합니다. "NT AUTHORITY \ SYSTEM"을 사용하여 문제를 해결했습니다.
자드 카리미

2

Windows 인증을 사용하여 로컬 데이터베이스 .mdf 파일에 연결했고 내 로컬 서버는 SQL Server 2014였습니다. 내 문제는 다음 연결 문자열을 사용하여 해결되었습니다.

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

나는 내 로컬 DB가 작동하기 위해 "사용자 인스턴스 진정한 ="이 부분을 제거했다
익명

2

제 경우에는 다른 문제입니다. 데이터베이스가 단일 사용자 모드로 바뀌었고 데이터베이스에 대한 두 번째 연결에서이 예외가 표시되었습니다. 이 문제를 해결하려면 아래 단계를 따르십시오.

  1. 개체 탐색기가 master와 같은 시스템 데이터베이스를 가리키는 지 확인합니다.
  2. a를 실행하고 exec sp_who2'my_db'데이터베이스에 대한 모든 연결을 찾습니다. KILL { session id }세션 ID가 sp_who2에 나열된 SPID 인 곳 을 수행하여 모든 연결을 종료 합니다.
USE MASTER;
EXEC sp_who2
  1. 데이터베이스 변경
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

1

나는 이것이 이전 호에서 언급 된 것을 보지 못했기 때문에 다른 가능성을 던져 보자. 그것은 그 수 IFItest에 도달 할 수없는하거나 존재하지 않습니다. 예를 들어, 각각 자체 데이터베이스가있는 여러 구성이있는 경우 데이터베이스 이름이 현재 구성에 대한 올바른 이름으로 변경되지 않았을 수 있습니다.


1

NB : Windows 서비스를 사용하여 웹 서비스를 호스팅하는 경우.

웹 서비스가 올바른 로그온 계정을 사용하여 SQL Server에 연결하는지 확인해야합니다.

  • 오픈 서비스 (Windows 서비스가 설치되었다고 가정합니다)
  • 서비스를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하십시오.
  • "로그온"탭을 클릭하십시오
  • "이 계정"라디오 버튼을 클릭합니다.
  • "찾아보기"를 클릭하십시오.
  • 텍스트 필드에 PC 사용자 이름을 입력하고 오른쪽에있는 "이름 확인"버튼을 클릭합니다.
  • 텍스트 필드의 텍스트를 클릭하고 "확인"버튼을 누릅니다.
  • 로그인 비밀번호를 입력하고 적용

1

내가 사용한 cyptus의 대답에서 영감을 얻었습니다.

_dbContext.Database.CreateIfNotExists();

첫 번째 데이터베이스 연결 전 (DB 시드 전) EF6에서.


1

서버에 데이터베이스를 생성하지 않은 경우 동일한 로그인 오류가 발생하므로 로그인하기 전에 데이터베이스가 있는지 확인하십시오.


1

asp.net mvc 템플릿에 제공된 기본 데이터베이스에 쓰려고 할 때이 문제가 발생했습니다. 이것은 데이터베이스가 아직 생성되지 않았기 때문입니다.

데이터베이스를 만들고 액세스 할 수 있는지 확인하려면 다음 단계를 따르십시오.

  1. Visual Studio에서 패키지 관리자 콘솔을 엽니 다.
  2. "update-database"명령을 실행합니다.

이렇게하면 필요한 모든 마이그레이션을 실행하는 데이터베이스가 생성됩니다.


0

가장 좋은 방법은 SQL 인증보다 더 안전하기 때문에 Windows 통합 인증을 사용하는 것입니다. 필요한 권한이있는 SQL Server에서 새 Windows 사용자를 만들고 응용 프로그램 풀 보안 설정에서 IIS 사용자를 변경합니다.


0

새 로그인을 만들 때 UserMapping 옵션도 설정해야했고 이로 인해 문제가 해결되었습니다. 자신도 여기에 갇힌 사람을 도울 수 있기를 바랍니다!

편집 : 로그인을 db 소유자로 설정하면 다음 문제도 해결되었습니다.


0

다른 SQL 서버에서이 db를 열고 (예 : sql managment studio (SMS)를 시작하고이 db를 추가하는 경우)이 서버를 중지하는 것을 잊어 버리면이 문제가 나타날 수 있습니다. 결과적으로 앱은 다른 서버에서이 DB에 이미 연결된 사용자와 연결을 시도합니다. 이 문제를 해결하려면 Config로이 서버를 중지하십시오. 디스패처 SQL 서버.

나쁜 영어에 대해 사과드립니다. 감사합니다, Ignat.


0

제 경우에는 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 응용 프로그램보다 조금 일찍 종료되었으며 서버가 다시 시작되기 전에 데이터베이스를 몇 초 동안 사용할 수 없었던 것 같습니다.


0

로그인을 DB 소유자로 설정하고 로그인을 사용할 데이터베이스에 대한 사용자 매핑을 설정 했더라도 실제 DB 사용자 (로그인뿐 아니라)가 '소유자'역할을 가지고 있는지 확인하십시오.


0

제 경우에는 "시스템"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 $'에 대해 불평하는 이유를 모르겠습니다. 해당 로그인과 해당 사용자를 삭제했지만 모든 것이 여전히 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.