私は、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>svcAccount
同じRELM<space>
ではありませんRELM
。余分なスペースを削除してSQLJDBCDriver.conf
もう一度やり直してください。
さらに、ファイル[domain_realm]
のこの部分には、krb5.conf
次の行のいずれかまたは両方が必要な場合と必要がない場合があります。
domain = RELM
.domain = RELM