2017-10-11 16 views

답변

1

더 나은 보안을 위해 Cloud 데이터베이스에서 Db2에 연결할 때 항상 SSL을 사용하는 것이 좋습니다. 예 JDBC를 통해 연결하려면 연결 문자열은 다음과 같을 것이다

"jdbc:db2://<Db2OnCloudServer>:50001/BLUDB:sslConnection=true;user=bluadmin;password=<Password>;enableSeamlessFailover=true;"

당신은 "서비스 자격 증명"에서 클라우드 서비스 인스턴스에 대한 사용자의 DB2에서이 문자열 및 자격 증명을 얻을 수 있습니다. 이미 해당 자격 증명이 표시되지 않으면 "새 자격 증명"을 클릭하면 해당 자격 증명이 나타납니다. SSL 사용의 또 다른 이점은 장애 조치 (failover)가 있고 위의 연결 문자열을 사용하는 경우 서버와 클라이언트가 대체 서버 정보를 교환 할 때 원활하게 다시 연결된다는 것입니다.

SSL 연결을 사용하지 않을 때는 서버에서 보낸 대체 서버 정보가 SSL 연결에만 사용되기 때문에 응용 프로그램이 다시 연결될 수 있도록 매개 변수를 추가로 지정해야합니다. 당신은 다음과 같이 연결 문자열을 사용할 수 있도록하려면 :

"jdbc:db2://<DB2OnCloudServer>:50000/BLUDB:user=bluadmin;password=<Password>;enableClientAffinitiesList=1;maxRetriesForClientReroute=10;retryIntervalForClientReroute=5;clientRerouteAlternateServerName=<Db2OnCloudServer>,<Db2OnCloudServer>;clientRerouteAlternatePortNumber=50000,50000;enableSeamlessFailover=true;"

참고 문자열에서 대체 서버와 같은 서버를 지정합니다. 이것은 페일 오버가 발생할 때 서버의 IP가 이동하므로 연결이 항상 동일한 IP를 통해 이루어지기 때문입니다. clientRerouteAlternateServerNameclientRerouteAlternatePortNumber을 지정하면 서버에서 반환 된 값이 무시되어 SSL 포트에 대신 연결됩니다.

위의 내용은 데이터베이스에 대한 실제 연결을 처리하지만 애플리케이션에도 적절한 재시도 논리가 있어야합니다. 다음은 사용법을 보여주는 코드의 대략적인 샘플입니다. import java.sql. *;

public class JDBCSampleEx { 

    public static void main(String args[]) { 

     String connectionURL = "jdbc:db2://169.48.134.122:50000/BLUDB:user=bluadmin;password=MmM5OWQ3ZWUyZmNm;enableClientAffinitiesList=1;maxRetriesForClientReroute=10;retryIntervalForClientReroute=5;clientRerouteAlternateServerName=169.48.134.122,169.48.134.122;clientRerouteAlternatePortNumber=50000,50000;enableSeamlessFailover=true;"; 
     Connection con = null; 

     try { 

      // Load the JCC Driver class (db2jcc4.jar). 
      Class.forName("com.ibm.db2.jcc.DB2Driver"); 

      //Create the connection using the static getConnection method 
      con = DriverManager.getConnection(connectionURL); 

      Statement stmt = con.createStatement(); 
      ResultSet rs = null; 
      con.setAutoCommit(false); 
      try { 
       rs = stmt.executeQuery("select FIRSTNME, SALARY from EMPLOYEE"); 
       // Print results 
       while (rs.next()) { 
        System.out.println("Name= " + rs.getString("FIRSTNME") + " SALARY= " + rs.getString("SALARY")); 
       } 
       // do a random update 
       String sql = "update EMPLOYEE set FIRSTNME = '" + RandomAlphaNum.gen(10) + "'"; 
       stmt.executeUpdate(sql); 
       con.commit(); 
      } catch (java.sql.SQLException e) { 
       //Catch return code to do any retry 
       if (e.getErrorCode() == -30108 || e.getErrorCode() == -4498 || e.getErrorCode() == -4499) { 
        // Add any logic to reply the current in flight transaction 
        // if necessary 
        System.out.println("Replay any transactions if necessary"); 
       } else { 
        throw e; 
       } 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (con != null) { 
        con.close(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}