사용자 로그인 실패-오류 18456-심각도 14, 상태 38


23

SQL Server 로그 파일 뷰어에 표시되는 메시지 :

Login failed for user [User]
Error: 18456, Severity: 14, State 38

실제로 의미하는 것 :

Failed to open the explicitly specified database

내 질문:

유용한 설명 텍스트와 함께 심각도와 상태의 각 조합에 대해 18456 오류 (로그인 실패)의 모든 변형에 대한 목록이 있습니까?

Google에 있지만 특정 조합 이외의 것을 찾을 수 없습니다.

답변:


25

상태 코드와 그 의미.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

더 자세한 정보는 Aaron Bertrand의 블로그 에서 볼 수 있습니다 .


@PeteOakly 당신은 여기 상태 38에 대한 올바른 길에 있습니다. 상태 38에 대한 이유 중 하나로 누락 된 데이터베이스에 대한 아래 게시물을 참조하십시오.
John Dyer

4

연결 문자열에서 데이터베이스 이름의 오타로 인해 상태 코드 38과 동일한 오류가 발생했습니다.


2

이 오류를 해결할 때 찾은 내용은 다음과 같습니다. 사용자 이름과 암호가 아닌 Windows 로그인을 사용하여 일부 SQL 연결을 만들었습니다. 실제로 어떻게 또는 어떻게 발생했는지 확실하지 않지만 실제로 발생했습니다. 나는 그것들을 삭제하고 엔터티 모델을 재구성했다. 나는 내가 알고있는 또 다른 연결 줄을 사용했고 모두 기쁨입니다. 키는 Persist Security Info = True이며 네트워크 또는 외부 웹 사이트에서는 작동하지 않습니다.


2

나는 상태 38의 18456도 가지고 있었다. 연결 문자열에 'integrated security = true'가 있고 원하는 것이 아닙니다. 연결 문자열에는 사용할 사용자 ID와 비밀번호가 포함되어 있습니다. 설정을 false로 변경하면 모든 것이 잘되었습니다.


2

여러 인스턴스가있는 SQL Server에 로그온하려고 할 때이 오류가 발생했습니다. 연결 문자열이 인스턴스 이름을 지정하지 않았습니다. 인스턴스 이름을 지정하면 (SERVERNAME \ INSTANCENAME) 서버에 연결할 수있었습니다.


2

@Pete Oakly 는 상태 코드 목록과 함께 올바른 경로에 있습니다. 특히, 이것은 우리 모두가 관심있는 코드입니다.

38 '로그인 할 수 있지만 데이터베이스를 사용할 수 없습니다 (또는 로그인 권한이 없습니다)'

내 문제는 C # 오류 로그에서 시작되었습니다.

예외 | 게시 된 예외 | 000161 | 10/29/2018 | 11 : 06 : 40.210 | 16284 | InnerException | 로그인이 요청한 "InterestingDataBaseName"데이터베이스를 열 수 없습니다. 로그인이 실패했습니다. 사용자 'CORP \ anyuser'에 대한 로그인이 실패했습니다.

내 눈은 "로그인 실패" 부분 에 집중되었습니다 . 내 사용자는이 DB 서버를 사용했습니다. 로그인이 어떻게 실패 할 수 있습니까?

내가 대답을 한 것으로 프로그래머의 트리오에 의해이 게시물에 발견 : https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

로그인 자체가 아니며 액세스하려는 데이터베이스입니다. 존재하지 않습니다!

빙고! 다른 이유로 데이터베이스 이름을 변경했으며 구성 파일을 업데이트하지 않았습니다. DB 이름과 일이 다시 한 번 매력처럼 작동하도록 수정했습니다.


1

이 경우 SQL Server 구성 관리자 | SQL Server 네트워크 구성 | TCP / IP | IP | TCP 포트가 설정 되지 않았습니다 .

없이는 ODBC 연결을 설정하고 원격 SQL Management Studio 연결을 사용하고 사용자로 로그인 할 수도 있습니다. 그러나 Tomcat 응용 프로그램의 URL에 액세스 할 때마다 jdbc 연결을 시작한 다음 SQL Server 로그에서 오류 'xxxx'에 대한 로그인 실패 : reason 명시 적 정의 된 데이터베이스를 열지 못했습니다. 상태 38

여기에 jdbc 연결 문자열의 요약

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

이것은 그 대답 | SQL Server 네트워크 구성에 <인스턴스 이름>에 대한 프로토콜 | 명명 된 파이프를 활성화해야하고 파이프 이름 \\.\pipe\MSSQL$<instance name>\sql\query 을 올바르게 설정해야합니다.


1

글쎄, 이것은 데이터베이스 권한 관련 오류입니다. DBA의 역할을 이해하는 것이 매우 중요하기 때문에이 질문에 솔루션을 추가하고 있습니다. 그래서 내 제안이 있습니다.

  • 서버 관리자로 이동
  • 도구를 선택한 다음 컴퓨터 관리를 선택하십시오.
  • 로컬 사용자 및 그룹 확인
  • '컴퓨터 / 도메인 관리 용 내장 계정'설명으로 관리자 이름을 확인하십시오.

이제 해당 사용자 이름으로 로그인하면 사용자에게 액세스 권한을 부여 할 수 있습니다. 그렇게하려면 :

보안으로 이동하여 로그인을 마우스 오른쪽 버튼으로 클릭 하고 새 로그인을

로그인 창에서 사용자 이름을 입력하거나 검색 할 수 있습니다. 목록에서 사용자를 선택하고 확인확인을 클릭하십시오. 다시 하십시오.

동일한 로그인 창에서 서버 역할을 클릭하고 sysadmin, serveradmin, decreator 등과 같은 선택된 사용자에게 액세스 권한을 부여하십시오. 확인을 클릭하십시오 .

개별 데이터베이스에 대한 액세스 권한을 부여하려면 사용자 맵핑으로 이동 하여 요구 사항에 따라 액세스 권한을 제공하십시오.

데이터베이스 상태를 확인하십시오. 권한 : 로그인 권한 부여 : 사용

확인을 클릭하십시오


2
SQL Server Login to Database User 관계가 없거나 SQL Server Login기본 데이터베이스 를 더 이상 사용할 수 없는 가능성에 초점을 맞출 수 있다면이 방법은 꽤 좋은 대답 일 수 있습니다. 현재 귀하의 답변은 계정을 만드는 방법에 대한 일반적인 권장 사항입니다. 답변의 첫 부분이 OP 문제를 해결하는 데 어떻게 도움이되는지 잘 모르겠습니다. 그 부분을 설명해 주시겠습니까?
John aka hot2use
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.