Se Connecter à Oracle en JDBC Thin via Kerberos (Partie 2)

L’article précédent montre comment se connecter à une base de données Oracle via JDBC-Thin depuis un programme Java en s’appuyant sur Kerberos. Il est possible d’écrire le même code sans aucune référence à des classes non-standard. Il suffit, pour cela, de s’appuyer sur des paramètres d’exécution positionnés à l’aide des propriétés système oracle.net.*.

Pour faire court, vous trouverez ci-dessous un code JDBC standard inspiré du code utilisé pour réaliser une authentification via SSL dans un autre ancien article. Vous verrez, en supposant que le ticket Kerberos est chargé et que le fichier krb5.conf est dans le répertoire $JAVA_HOME/jre/lib/security comment utiliser un tel programme, simplement en changeant les propriétés système.

Le programme s’appelle OracleAuth.java et se connecte simplement à une base de données. Les paramètres URL, utilisateur et mot de passe sont passés « en dur » pour simplifier l’illustration, toutefois vous les passerez plutôt dans un fichier de propriétés. Dans la mesure où votre application vous laisse positionner les 2 derniers paramètres à vide, votre application fonctionnera naturellement à l’aide d’un jeton Kerberos sans passer aucune propriété de type nom d’utilisateur ou mot de passe. L’URL de connexion est dans le programme pour en simplifier l’écriture :

cat OracleAuth.java
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class OracleAuth {
public static void main(String[] args)
throws SQLException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String url = "jdbc:oracle:thin:@tmpdb.easyteam.fr:1521/ORCL";
String user="";
String password="";

Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select user from dual");

while (rset.next())
System.out.println(rset.getString(1));

rset.close();
stmt.close();
conn.close();
}
}

Pour utiliser ce programme, il suffit donc de le compiler et de l’exécuter en prenant soin de positionner les 2 propriétés système ci-dessous :

  • oracle.net.authentication_services définit le service d’authentification, ou ici KERBEROS5
  • oracle.net.kerberos5_mutual_authentication définit avec la valeur true que l’authentification est réalisée via Kerberos. 

Dans un premier temps vous compilerez le programme comme ci-dessous :

echo $CLASSPATH
/opt/sqldeveloper/jdbc/lib/ojdbc6.jar:.
javac OracleAuth.java

Puis vous pourrez l’exécuter avec les propriétés système décrites précédemment :

java -Doracle.net.authentication_services="(KERBEROS5)" 
-Doracle.net.kerberos5_mutual_authentication=true OracleAuth

Vous constaterez ainsi qu’il est possible de se connecter en s’appuyant uniquement sur Kerberos avec du code standard à :

SCOTT