kerberos [jdbc 드라이버]를 통해 Redhat7과 MSSQL 데이터베이스 간의 연결 설정

kerberos [jdbc 드라이버]를 통해 Redhat7과 MSSQL 데이터베이스 간의 연결 설정

저는 mssql에 연결하기 위해 Redhat 7에서 만든 Java 애플리케이션이 우리 회사의 자동 장치가 생성한 키 탭에 저장된 주체를 구문 분석할 수 없는 매우 성가신 문제를 해결하고 있습니다. 주체는 svcAccount/fqdn@RELM 키 탭에 저장됩니다.

테스트를 위해 다음 명령을 사용하여 cCache를 생성했습니다.

kinit -f -c -p FILENAME svcAccount@REALM

이 연결 구성은 cCache에 저장된 주체의 구문이 Microsoft 애플리케이션에 대해 불안정하기 때문에 잘 작동하지만 사용 중인 키탭과 연결을 설정하려고 하면 다음 오류가 발생합니다.

**com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 
'domain\ svcAccount/fqdn '**

KRB5.conf에 "auth_to_local"을 추가하려고 시도했지만 kerberos가 이 구성을 무시하는 것 같습니다.

Windows 서버에서 이 주체 이름을 매핑하는 방법을 아시나요? 내 Java 애플리케이션에서 이를 수정해야 합니까, 아니면 단지 잘못된 Kerberos 구성입니까? 더 어렵게 만들려면 kadmin 권한이 없고 키탭을 수정할 수 없습니다./


Kerberos 구성:

Klist –kte keytab.file:

KVNO Timestamp           Principal

   3 12/31/1969 19:00:00 svcAccount/fqdn@RELM (encryption method)

   3 12/31/1969 19:00:00 svcAccount/fqdn@RELM (encryption method)

   3 12/31/1969 19:00:00 svcAccount/fqdn@RELM (encryption method)

SQLJDBCDriver.conf

SQLJDBCDriver {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="FILE:/home/filename.keytab"

principal=" svcAccount/fqdn@RELM "

storeKye=true

debug=true

credsType=both

doNotPrompt=true;

};

Java는 매개변수로 시작합니다.

JAVA_OPTS="-Dspring.jmx.enabled=false -Dkerberos.client.reference.name=SQLJDBCDriver -Djava.security.auth.login.config=/etc/path/SQLJDBCDriver.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Dspring.profiles.active=uat"

연결 문자열:

url: jdbc:sqlserver://serverName:2431;databaseName=DB_NAME;integratedSecurity=true;authenticationScheme=JavaKerberos;serverSpn=MSSQLSvc/fqdn:2431@DOMAIN

KRB5.CONF

[libdefaults]

  default_realm = DOMAIN.COM

  default_ccache_name = KEYRING:persistent:%{uid}

  dns_lookup_realm = true

  dns_lookup_kdc = true

  noaddresses = true

  kdc_timesync = 0

  rdns = false

  kdc_timeout = X

  max_retries = X

  ticket_lifetime = XX

  renew_lifetime = XX



[realms]

    DOMAIN.COM = {

    }



[domain_realm]

   domain.com = DOMAIN.COM

[appdefaults]

       pam = {

               validate = true

               keytab = /etc/krb5.keytab

               banner = login

               minimum_uid = X

               addressless = X

               use_shmem = tX

               ignore_unknown_principals = X

       }

       kinit = {

               renewable = true

               forwardable= true

       }

답변1

**com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user
'domain\ svcAccount/fqdn '**

앞뒤에 공백이 있는지 확인하십시오 svcAccount/fqdn.

SQLJDBCDriver.conf에서 이러한 공백은 큰따옴표 안에도 존재합니다.

principal=" svcAccount/fqdn@RELM "

svcAccount는 와 동일하지 않고 <space>svcAccountRELM<space>동일하지 않습니다 RELM. 여분의 공백을 제거 SQLJDBCDriver.conf하고 다시 시도하십시오.

또한 파일 [domain_realm]의 이 부분에는 krb5.conf다음 줄 중 하나 또는 둘 모두가 필요할 수도 있고 필요하지 않을 수도 있습니다.

domain = RELM
.domain = RELM

답변2

답변 감사합니다만, 포스팅을 준비하면서 해당 칸을 잘못 입력했습니다. 연결 문자열에 하드코딩된 사용자 이름과 비밀번호를 사용하고 cCache 파일을 사용하여 연결을 설정할 수 있기 때문에 "도메인" 줄에 문제가 있다고 생각하지 않습니다. 이는 krb5.conf가 연결 설정을 허용하지만 kerberos가 이겼음을 의미합니다. Microsoft 서비스에 대해 이해할 수 있도록 변환된 주체를 전달하지 않습니다.

드디어 연결이 됐다고 덧붙이고 싶습니다.

해결 방법: 모든 도구[ktutil kinit kadmin etc]와 함께 krb5 서버를 다운로드하고, Principal@REALM 규칙에 따라 주체를 추가하고, 생성된 키 탭으로 저장합니다[새 항목이 추가됩니다]. ..그게 다입니다 :) 해결 방법이라는 것을 알고 있지만 작동합니다. Kerberos는 악몽이기 때문에 효과가 있기를 바랍니다. 이 기술의 이름만으로도 충분합니다... 빠른 구성을 방해합니다 :D

스레드를 닫을 수 있습니다.

관련 정보