首页 > 解决方案 > JavaKerberos 在连接到 MS SQL DB 时未使用提供的用户名和密码

问题描述

我正在尝试使用带有提供的用户名和密码的 JavaKerberos 连接到 Ms SQL DB。按照这个https://github.com/microsoft/mssql-jdbc/issues/66#并使用 mssql-jdbc-6.2.2.jre8.jar,它应该在连接字符串中使用提供的用户名和密码来连接到 DB,但是它试图与 AD 用户名连接。下面是我的java代码

public static void main(String[] args) {
        Connection con = null;
        CallableStatement cstmt = null;
        ResultSet rs = null;
        try {
            // Establish the connection. 
            SQLServerDataSource ds = new SQLServerDataSource();
            ds.setIntegratedSecurity(true);
            ds.setAuthenticationScheme("JavaKerberos");
            ds.setServerName("myserver");
            ds.setPortNumber(1433); 
            ds.setDatabaseName("users");
            ds.setUser("user");
            ds.setPassword("password");
            con = ds.getConnection();
        // Execute a stored procedure that returns some data.
                    cstmt = con.prepareCall("{call dbo.uspGetEmployeeManagers(?)}");
                    cstmt.setInt(1, 50);
                    rs = cstmt.executeQuery();

                // Iterate through the data in the result set and display it.
                while (rs.next()) {
                        System.out.println("EMPLOYEE: " + rs.getString("LastName") + 
                            ", " + rs.getString("FirstName"));
                        System.out.println("MANAGER: " + rs.getString("ManagerLastName") + 
                            ", " + rs.getString("ManagerFirstName"));
                        System.out.println();
                }
            }
        // Handle any errors that may have occurred.
            catch (Exception e) {
                e.printStackTrace();
            }
    }

还设置 .java.login.config 如下并使用 mssql-jdbc-6.2.2.jre8.jar (从http://www.java2s.com/example/jar/m/download-mssqljdbc622jre8jar-file.html下载)

cat ~/.java.login.config
SQLJDBCDriver {
   com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;
};

我得到以下错误

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user '{my AD user name}'. ClientConnectionId:3a3d0513-1f87-42d8-a799-b9f43374e1a6
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:256)
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:108)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$1LogonProcessor.complete(SQLServerConnection.java:4014)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4292)

看起来它没有使用提供的用户名和密码来建立连接,我在这里错过了什么吗?请让我知道如何解决这个问题。

标签: javasql-serverkerberosmssql-jdbc

解决方案


推荐阅读