Драйвер Microsoft JDB C со странным поведением с кодом java - PullRequest
0 голосов
/ 23 апреля 2020

Я пытался с кодом java использовать драйвер Microsoft JDB C для получения соединения на SQL Экземпляр включен с SSL Protocal и SQL Сервер с протоколом NTLMV2.

Я использую windows проверка подлинности для получения соединения, которое будет действовать как по протоколам SSL, так и по протоколам NTLMV2.

Но странно то, что мы можем установить sh connection java JDB C client без установки свойства java для NTLMV2 и SSL.

Может кто-нибудь помочь мне понять, почему эта странная вещь произошла с использованием драйвера Microsoft JDB C.

Найдите мой кодовый фрагмент java, использующий URL-адрес подключения для получения соединения с SQL Экземпляр, включенный с протоколами SSL и NTLMV2.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;


public class SqlJdbcConnection 
{
    String dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String connectionUrl = "";

    private void connect()
    {
        Connection conn=null;
        Statement stmt=null;
        ResultSet rset=null;
        try 
        {
            Class.forName(dbDriver);
        } 
        catch (ClassNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return;
        }  
        try
        {           
            connectionUrl = "jdbc:sqlserver://192.168.11.215:1433;databaseName=master;integratedSecurity=true";         
            Properties infoProperties=new Properties();
            infoProperties.put("UserName","administrator");
            infoProperties.put("Password","abc098ABC");
            infoProperties.put("domain","mas");
            infoProperties.put("authenticationScheme","NTLM");
            conn = DriverManager.getConnection(connectionUrl, infoProperties);
            if(conn==null)
            {
                System.out.println("Connection is null");
                return;
            }
            stmt=conn.createStatement();
            rset = stmt.executeQuery("select @@version");
            while(rset.next())
            {
                System.out.println(rset.getString(1));
            }

        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
        finally
        {
            if(rset!=null)
            {
                try 
                {
                    rset.close();
                } catch (Exception e2) {
                    // TODO: handle exception
                }
            }
            if(stmt!=null)
            {
                try 
                {
                    stmt.close();
                } catch (Exception e2) {
                    // TODO: handle exception
                }
            }
            if(conn!=null)
            {
                try 
                {
                    conn.close();
                } catch (Exception e2) {
                    // TODO: handle exception
                }
            }
        }

    }
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        SqlJdbcConnection sqljdbc=new SqlJdbcConnection();
        sqljdbc.connect();      }
}

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Вам необходимо добавить sqljdbc_auth.dll в среду выполнения с помощью java -D java .library.path = {путь к sqljdbc_auth.dll}, и при этом вам не нужно указывать имя пользователя, поскольку оно пользователь, под которым вы запускаете Java VM.

Эта DLL находится в пакете драйвера Microsoft JDB C.

Если ваш пользователь является пользователем SQL -Server, то вам не требуется встроенная защита.

0 голосов
/ 23 апреля 2020

Поддержка SSL / TLS не обязательна в спецификации JDB C. Таким образом, вы не можете ожидать этого в каждом драйвере.

Следующие свойства также используются для аутентификации NTLM V2:

domain = domainName (optional)
user = userName
password = password
integratedSecurity = true

Неумышленно вы уже используете аутентификацию NTLM v2

...