我试图通过使用密钥表连接到SQL Server和它下面抛出错误
com.microsoft.sqlserver.jdbc.SQLServerException:不能与Kerberos主体域\用户登录,检查您的凭证。 Kerberos的登录失败:集成身份验证失败。 ClientConnectionId:6f436f49-b0bf-441E-bab3-e6af86ac8361由于javax.security.auth.login.LoginException(不能得到任何属性:[密码后,密码]从不可用,以争取从用户认证信息CON属性)在COM。 microsoft.sqlserver.jdbc.KerbAuthentication.intAuthInit(KerbAuthentication.java:108)在com.microsoft.sqlserver.jdbc.KerbAuthentication.GenerateClientContext(KerbAuthentication.java:399)在com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection。 Java的:4049)在com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3157)维持在com.microsoft.sqlserver com.microsoft.sqlserver.jdbc.SQLServerConnection.access $ 100(SQLServerConnection.java:82)。 jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:3121)在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151)在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java: 2478)在com.microsof t.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2026)在com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1687)在com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection。的java:1528)在com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:866)在com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:569)在java.sql.DriverManager.getConnection (未知来源)在java.sql.DriverManager.getConnection(未知来源)在com.adventnet.appmanager.server.mssql.datacollection.MSSQLKerberosAuthenticationTest.main(MSSQLKerberosAuthenticationTest.java:47)产生的原因:javax.security.auth.login中。 LoginException异常:无法获得任何属性:[密码后,密码]从不可用,以争取从com.sun.security.auth.module.Krb5LoginModule.promptForPass(来源不明)在com.sun.security用户认证信息CON性能。 auth.module.Krb5LoginModu le.attemptAuthentication(来源不明)在com.sun.security.auth.module.Krb5LoginModule.login(来源不明)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在java.lang.reflect.Method.invoke(未知来源)在javax.security.auth.login.LoginContext.invoke(未知来源)在javax.security.auth.login中。 LoginContext.access $ 000(来源不明)处java.security.AccessController.doPrivileged javax.security.auth.login.LoginContext中$ 4.run(来源不明)在javax.security.auth.login.LoginContext中$ 4.run(来源不明) (本机方法)在javax.security.auth.login.LoginContext.invokePriv(来源不明)在javax.security.auth.login.LoginContext.login(来源不明)在com.microsoft.sqlserver.jdbc.KerbAuthentication.intAuthInit(KerbAuthentication的.java:87)... 15个
当我试着使用密码连接成功。
String home = System.getProperty("user.dir");
String filePath = home + File.separator + "conf" + File.separator + "KerberosConfigurations" + File.separator + "MSSQL";// NO I18N
System.setProperty("java.security.krb5.debug", "true");
System.setProperty("java.security.auth.login.config", filePath+File.separator+"login.conf");
System.setProperty("java.security.krb5.conf", filePath+File.separator+"krb5.ini");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
String connectionUrl = "jdbc:sqlserver://"+hostName+":"+port+";databaseName=master;sendStringParametersAsUnicode=true;applicationName=test;"; //NO I18N
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Properties dbConProp = new Properties();
dbConProp.put("integratedSecurity", "true");
dbConProp.put("authenticationScheme", "JavaKerberos");
dbConProp.put("instanceName",instanceName);
dbConProp.put("user",user);
//dbConProp.put("password",pwd);
con = DriverManager.getConnection(connectionUrl,dbConProp);
请问在连接属性的密码是强制性的Kerberos连接? 单独密钥表还不够?