로그인에서 요청한 데이터베이스 "테스트"를 열 수 없습니다.로그인에 실패했습니다.사용자 'xyz\'에 대한 로그인 실패ASPNET'
나는 db에 데이터를 저장하는 웹 서비스를 만들었습니다.하지만 다음 오류가 발생했습니다.
로그인에서 요청한 데이터베이스 "테스트"를 열 수 없습니다.로그인에 실패했습니다.사용자 'xyz\'에 대한 로그인 실패'ASPNET'입니다.
내 연결 문자열은
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
흠, 오류는 꽤 분명하죠, 그렇죠?사용자 "xyz/ASPNET"(ASP 계정)를 사용하여 SQL Server에 연결하려고 합니다.NET 앱이 실행 중입니다.
이 계정은 SQL Server에 연결할 수 없습니다. SQL Server에서 해당 계정에 대한 로그인을 생성하거나 연결 문자열에 다른 유효한 SQL Server 계정을 지정하십시오.
원래 질문을 업데이트하여 연결 문자열을 보여줄 수 있습니까?
업데이트: 예, 통합 Windows 인증을 사용하고 있습니다. --> "xyz\"에 대한 SQL Server 로그인을 생성해야 합니다.SQL Server에서 ASPNET" - 또는 연결 문자열을 다음과 같은 형식으로 변경합니다.
connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"
데이터베이스에 암호가 "top$secret"인 "xyz" 사용자가 있는 경우.
- 둘 중 하나: "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]
이 문제를 해결한 것은 다음과 같습니다.
- IIS의 응용 프로그램 풀로 이동
- 내 프로젝트 응용 프로그램 풀에서 마우스 오른쪽 단추 클릭
- 프로세스 모델 섹션에서 ID 열기
- 사용자 지정 계정 옵션 선택
- PC 사용자 이름과 암호를 입력합니다.
나는 데이터베이스가 생성되지 않았고 EF 코드가 먼저 생성되어야 했지만 항상 이 오류가 발생합니다.동일한 연결 문자열이 spnet core 기본 웹 프로젝트에서 작동하고 있습니다.해결책은 다음과 같습니다.
_dbContext.Database.EnsureCreated()
첫 번째 데이터베이스 연결 전(DB 시드 전).
로그인 문제에 대한 가장 좋은 해결책은 sqlServer에 로그인 사용자를 생성하는 것입니다.다음은 Windows 인증(SQL Server Management Studio)을 사용하는 SQL Server 로그인을 만드는 단계입니다.
- SQL Server Management Studio에서 Object Explorer를 열고 새 로그인을 생성할 서버 인스턴스의 폴더를 확장합니다.
- 보안 폴더를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 로그인을 클릭합니다.
- 일반 페이지의 로그인 이름 상자에 Windows 사용자의 이름을 입력합니다.
- Windows 인증을 선택합니다.
- 확인을 클릭합니다.
들어 이 예들어사이름이자용인 경우xyz\ASPNET
그런 다음 이 이름을 로그인 이름 상자에 입력합니다.
또한 접근할 데이터베이스에 대한 접근을 허용하도록 사용자 매핑을 변경해야 합니다.
대부분은 로그인 문제가 아니라 데이터베이스 자체를 만드는 문제입니다.따라서 데이터베이스 작성에 오류가 발생할 경우, 데이터베이스는 처음부터 작성되지 않습니다.이 경우 사용자에 관계없이 로그인을 시도하면 로그인이 실패합니다.이 문제는 일반적으로 DB 컨텍스트의 논리적 잘못된 해석으로 인해 발생합니다.
브라우저에서 사이트를 방문하여 해당 오류 로그를 실제로 읽어보면 코드 문제(일반적으로 모델과 상충되는 논리 문제)를 발견하는 데 도움이 될 수 있습니다.
저의 경우, 코드가 정상적으로 컴파일되고 로그인 문제가 동일합니다. 관리 스튜디오를 다운로드하는 동안 오류 로그를 확인하고 DB 컨텍스트 제약 조건을 수정한 후 사이트가 정상적으로 실행되기 시작했습니다. 그 동안 관리 스튜디오가 다운로드 중입니다.
이것은 나에게 효과가 있습니다.
- SQL Server >> Security >> 로그인 후 NT AUTHORITY\NETWORK SERVICE를 마우스 오른쪽 버튼으로 클릭하여 Properties를 선택합니다.
- 새로 연 로그인 정보 화면에서 "사용자 매핑" 탭으로 이동합니다.
- 그런 다음 "사용자 매핑" 탭에서 원하는 데이터베이스(특히 이 오류 메시지가 표시되는 데이터베이스)를 선택합니다.
- 확인을 클릭합니다.
이 블로그를 읽으십시오.
DB의 이름을 잘못 입력할 때도 발생합니다.
ex : xxx-db-dev to xxx-dev-db
가끔은 그냥 바보같은 실수야 이걸 알아내는데 1시간 이상 걸려 :( 왜냐하면 나는 어려운걸 먼저 많이 시도하기 때문이야
이슈
이 오류는 다음과 유사한 메시지로 나타납니다.
로그인에서 요청한 데이터베이스 "DATABASE NAME"을 열 수 없습니다.로그인에 실패했습니다.사용자 XYZ에 대해 로그인하지 못했습니다.
- 일반적으로 단순한 Visual Studio 또는 전체 컴퓨터를 다시 시작하여 오류를 해결할 수 없습니다.
- 이 오류는 잠긴 것처럼 보이는 데이터베이스 파일로도 발견될 수 있습니다.
픽스
솔루션은 다음 단계로 구성됩니다.데이터베이스의 데이터가 손실되지 않으며 데이터베이스 파일을 삭제하면 안 됩니다!
필수 구성 요소:SQL Server Management Studio(전체 또는 Express)를 설치해야 합니다.
- SQL Server Management Studio 열기
- "서버에 연결" 창(파일->연결 개체 탐색기)에서 다음을 입력합니다.
- 서버 유형: 데이터베이스 엔진
- 서버 이름: (localdb)\v11.0
- 인증 : [로컬 데이터베이스를 만들 때 사용한 것.Windows Authentication(윈도우 인증)일 수 있습니다.
- "연결"을 클릭
- Object Explorer에서 "데이터베이스" 폴더를 확장합니다(View->Object Explorer, F8).
- 데이터베이스를 찾습니다.데이터베이스(.mdf) 파일의 전체 경로로 이름을 지정해야 합니다.
- 데이터베이스 이름 끝에 "복구 보류 중"이라고 표시되거나 데이터베이스를 확장하려고 하면 오류 메시지가 표시되거나 표시되지 않을 수 있습니다.
- 이게 문제야!데이터베이스가 기본적으로 손상되었습니다.
- 데이터베이스를 마우스 오른쪽 단추로 클릭한 후 "작업 -> 분리"를 선택합니다..".
- 분리 창에서 목록에서 데이터베이스를 선택하고 "연결 끊기" 열을 선택합니다.
- 확인을 클릭합니다.
- 데이터베이스 목록에서 데이터베이스가 사라집니다.당신의 문제는 이제 해결되어야 합니다.가서 localdb를 사용하는 응용 프로그램을 실행합니다.
- 응용프로그램을 실행한 후 데이터베이스가 데이터베이스 목록에 다시 나타납니다. 이것이 맞습니다.정상적으로 작동해야 하므로 더 이상 "복구 보류"라고 말하면 안 됩니다.
솔루션의 출처: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
나는 사용자를 업데이트하려고 시도했고, 그것은 작동했습니다.아래 명령을 참조하십시오.
USE ComparisonData// databaseName
EXEC sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';
교체하기만 하면 됩니다.user('ftool')
따라서.
WPF를 만들 때 이런 문제가 있었습니다.NET Core + Entity Framework Core 프로젝트를 새 랩톱에 복제합니다.
사용:
update-database
패키지 관리자 콘솔에서 간단히 해결했습니다.
패키지 관리자 콘솔을 열려면 다음 위치로 이동하십시오.
Tools-> Nuget Package Manager -> Package Manager console
윈도우즈 인증을 사용하여 로컬 데이터베이스 .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
asp.net mvc 템플릿에 제공된 기본 데이터베이스에 쓸 때 이 문제가 발생했습니다.데이터베이스가 아직 작성되지 않았기 때문입니다.
데이터베이스를 작성하고 데이터베이스에 액세스할 수 있는지 확인하려면 다음 단계를 수행합니다.
- Visual Studio에서 패키지 관리자 콘솔 열기
- "update-database" 명령을 실행합니다.
그러면 데이터베이스가 생성되고 필요한 모든 마이그레이션이 실행됩니다.
이전 호에서 언급된 것을 본 적이 없으므로 다른 가능성을 배제하겠습니다.그럴 수도 있습니다.IFItest
연결할 수 없거나 단순히 존재하지 않습니다.예를 들어, 각각 고유한 데이터베이스가 있는 여러 구성이 있는 경우 데이터베이스 이름이 현재 구성에 대해 올바른 이름으로 변경되지 않았을 수 있습니다.
NB: Windows 서비스를 사용하여 웹 서비스를 호스팅하는 경우.
웹 서비스가 SQL Server에 연결하기 위해 올바른 로그온 계정을 사용하고 있는지 확인해야 합니다.
- 서비스 열기(Windows 서비스가 설치된 것으로 가정함)
- 서비스를 마우스 오른쪽 단추로 클릭하고 속성으로 이동합니다.
- 로그온 탭 클릭
- "이 계정" 라디오 단추 클릭
- 찾아보기를 클릭합니다.
- 텍스트 필드에 PC 사용자 이름을 입력하고 오른쪽에 있는 "이름 확인" 단추를 누릅니다.
- 텍스트 필드에서 텍스트를 클릭하고 "확인" 버튼을 누릅니다.
- 로그인 암호 입력 및 적용
내가 사용한 사이프투스의 대답에서 영감을 받았습니다.
_dbContext.Database.CreateIfNotExists();
첫 번째 데이터베이스 연락 전(DB 시드 전) EF6에 있습니다.
서버에 데이터베이스를 작성하지 않은 경우 동일한 로그인 오류가 발생합니다.로그인하기 전에 데이터베이스가 있는지 확인합니다.
대부분의 경우 로그인 문제가 아닙니다.데이터베이스가 생성되지 않았을 수 있습니다.데이터베이스를 작성하려면 DB 컨텍스트 파일로 이동하여 추가합니다.데이터베이스.생성 확인();
SQL 인증보다 안전하기 때문에 Windows 통합 인증을 사용하는 것이 가장 좋습니다.필요한 권한을 가진 새 윈도우즈 사용자를 sql 서버에 생성하고 응용 프로그램 풀 보안 설정에서 IIS 사용자를 변경합니다.
나는 새로운 로그인을 만들 때 사용자 매핑 옵션도 설정해야 한다는 것을 알게 되었고 이것이 나의 문제를 해결했습니다.그들 자신이 여기에 갇혔다는 것을 발견한 사람들에게 도움이 되기를 바랍니다!
편집: 로그인을 DB 소유자로 설정하면 다음 문제도 해결됩니다.
다른 SQL 서버에서 이 DB를 열고(예: sql management studio(SMS)를 시작하고 이 DB를 추가) 이 서버를 중지하지 않는 경우 이 문제가 발생할 수 있습니다.결과적으로 앱은 다른 서버 아래에 있는 이 DB에 이미 연결된 사용자와 연결을 시도합니다.이 문제를 해결하려면 Config.dispatcher sql server에서 이 서버를 중지하십시오.
서투른 영어에 대해 사과드립니다.잘 부탁드립니다, 이그나트.
저의 경우, 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.
서버가 다시 시작되고 있었고 ASP보다 조금 더 일찍 종료된 SQL 서버가 있는 것 같습니다.서버를 다시 시작하기 전에 몇 초 동안 NET 응용 프로그램과 데이터베이스를 사용할 수 없었습니다.
로그인을 DB 소유자로 설정하고 로그인을 사용할 데이터베이스에 대한 사용자 매핑을 설정한 경우에도 실제 DB 사용자(로그인뿐만 아니라)가 '소유자' 역할을 가지고 있는지 확인합니다.
저의 경우, "시스템" 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 액세스 권한을 부여하고 대상 데이터베이스에 해당 로그인에 대한 사용자를 추가한 후에도 동일한 오류가 발생했습니다.분명히 나는 'NT AUTHORITY\SYSTEM' 로그인에도 동일한 작업이 필요했습니다.그렇게 한 후, 저는 문제없이 로그인할 수 있었습니다.오류 메시지가 'MYDOMAINNAME\HOSTNAME$'에 대해 불평하는 이유를 모르겠습니다.나는 그 로그인을 삭제했고 해당 사용자와 모든 것이 여전히 작동합니다.
EF Code First를 사용할 때는 데이터베이스가 존재하는지 확인합니다.먼저 update-database 명령을 실행할 수 있습니다.
위의 해결책이 작동하지 않는 경우.
동일한 오류 메시지가 표시되었지만 제 문제는 완전히 다릅니다.방금 데이터베이스를 복원했는데 데이터베이스가 복원 모드에 있었습니다.따라서 데이터베이스가 rstoring 모드에 있는 경우 다음 쿼리를 적용합니다.
RESTORE DATABASE MyDatabase
FROM DISK = 'pathToYourDbBackup\MyDatabase.bak'
WITH REPLACE,RECOVERY
DB를 삭제하고 다시 만드는 것을 잊어버렸을 때 이런 일이 있었습니다.데이터베이스 폴더를 새로 고쳐야 하기 때문에 이 문제가 발생할 수 있습니다.
이전에 문제가 없었는데 패키지 관리자 콘솔에서만 이 오류가 발생하면 특별한 작업을 수행할 필요가 없습니다.sql server 개체 탐색기 창을 열고 연결한 후 콘솔에서 명령을 다시 실행하기만 하면 됩니다.
나는 이와 같은 오류를 경험했지만 SQL에 암호나 사용자 이름을 생성할 필요가 없었습니다.pyodbc.connect 문자열을 고치기만 하면 되었습니다.
'Driver={SQL Server};'
'Server=ExactServerName;'
'Database=ExactDatabaseName;'
'Trusted_Connection=yes;'
일단 정확한 데이터를 전달하면 잘 작동했습니다.
언급URL : https://stackoverflow.com/questions/2575907/cannot-open-database-test-requested-by-the-login-the-login-failed-login-fail
'programing' 카테고리의 다른 글
각도 재료가 각도 재료 코어 테마를 찾을 수 없습니다. (0) | 2023.04.26 |
---|---|
함수 호출 시 목록을 *args로 변환 (0) | 2023.04.26 |
셀(1,1) = 500 * 100은 오버플로를 유발하지만 50000 * 100은 오버플로를 유발하지 않는 이유는 무엇입니까? (0) | 2023.04.26 |
재귀 파일 목록의 깊이를 제한하는 방법은 무엇입니까? (0) | 2023.04.26 |
WPF: 사용자가 드래그한 후 트리거하는 이벤트가 있는 슬라이더 (0) | 2023.04.26 |