답변:
상태 코드와 그 의미.
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의 블로그 에서 볼 수 있습니다 .
@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 이름과 일이 다시 한 번 매력처럼 작동하도록 수정했습니다.
이 경우 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
을 올바르게 설정해야합니다.
글쎄, 이것은 데이터베이스 권한 관련 오류입니다. DBA의 역할을 이해하는 것이 매우 중요하기 때문에이 질문에 솔루션을 추가하고 있습니다. 그래서 내 제안이 있습니다.
이제 해당 사용자 이름으로 로그인하면 사용자에게 액세스 권한을 부여 할 수 있습니다. 그렇게하려면 :
보안으로 이동하여 로그인을 마우스 오른쪽 버튼으로 클릭 하고 새 로그인을
로그인 창에서 사용자 이름을 입력하거나 검색 할 수 있습니다. 목록에서 사용자를 선택하고 확인 및 확인을 클릭하십시오. 다시 하십시오.
동일한 로그인 창에서 서버 역할을 클릭하고 sysadmin, serveradmin, decreator 등과 같은 선택된 사용자에게 액세스 권한을 부여하십시오. 확인을 클릭하십시오 .
개별 데이터베이스에 대한 액세스 권한을 부여하려면 사용자 맵핑으로 이동 하여 요구 사항에 따라 액세스 권한을 제공하십시오.
데이터베이스 상태를 확인하십시오. 권한 : 로그인 권한 부여 : 사용
확인을 클릭하십시오