Création de l’URL de connexion
La forme générale d'une URL de connexion est
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
où :
jdbc:sqlserver:// (obligatoire) constitue le sous-protocole et sa constante.
serverName (facultatif) correspond à l’adresse du serveur auquel se connecter. Il peut s’agir d’un nom DNS ou d’une adresse IP, ou encore de localhost ou de 127.0.0.1 pour l’ordinateur local. S'il n'est pas spécifié dans l'URL de connexion, le nom du serveur doit être spécifié dans la collection de propriétés.
instanceName (facultatif) est l’instance à laquelle se connecter sur serverName. Si cette valeur n'est pas spécifiée, une connexion à l'instance par défaut est établie.
portNumber (facultatif) est le port auquel se connecter sur serverName. La valeur par défaut est 1433. Si vous utilisez la valeur par défaut, vous ne devez pas spécifier dans l’URL le port ni le signe « : » qui le précède.
Notes
Pour des performances de connexion optimales, vous devez définir la valeur de portNumber lors de la connexion à une instance nommée. Cela permet d'éviter une boucle avec le serveur pour déterminer le numéro du port. Si un portNumber et un instanceName sont utilisés, le portNumber aura la priorité et l'instanceName sera ignoré.
property (facultatif) correspond à une ou plusieurs propriétés de connexion. Pour plus d'informations, consultez Définition des propriétés de connexion. Vous pouvez spécifier n'importe quelle propriété de la liste. Les propriétés peuvent séparées seulement des points-virgules (« ; ») et ne peuvent pas figurer en doublon.
Attention
Pour des raisons de sécurité, il convient d'éviter de créer les URL de connexion en se basant sur des entrées utilisateur. Il est préférable de spécifier uniquement le nom du serveur et le pilote dans l'URL. Pour les valeurs de nom d'utilisateur et de mot de passe, utilisez des collections de propriétés de connexion. Pour plus d'informations sur la sécurité de vos applications JDBC, consultez Sécurisation des applications de pilote JDBC.
Propriétés de connexion
Pour obtenir la liste détaillée des propriétés qui peuvent être définies dans la chaîne de connexion, consultez Définir les propriétés de connexion.
Exemples de connexion
Connectez-vous à la base de données par défaut sur l'ordinateur local à l'aide d'un nom d'utilisateur et d'un mot de passe :
jdbc:sqlserver://localhost;encrypt=true;user=MyUserName;password=*****;
Notes
Bien que l'exemple précédent utilise un nom d'utilisateur et un mot de passe dans la chaîne de connexion, vous devez utiliser une sécurité intégrée, pour mieux sécuriser. Pour plus d’informations, consultez la section Connexion avec une authentification intégrée plus loin dans cette rubrique.
La chaîne de connexion suivante montre un exemple de connexion à une base de données SQL Server à l’aide de l’authentification intégrée et de Kerberos à partir d’une application qui s’exécute sur n’importe quel système d’exploitation pris en charge par Pilote Microsoft JDBC pour SQL Server :
jdbc:sqlserver://;servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos
Connexion à la base de données par défaut sur l'ordinateur local à l'aide d'une authentification intégrée :
jdbc:sqlserver://localhost;encrypt=true;integratedSecurity=true;
Connexion à une base de données nommée sur un serveur distant :
jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;
Connexion au port par défaut du serveur distant :
jdbc:sqlserver://localhost:1433;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;
Connexion en spécifiant un nom d'application personnalisé :
jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;
Instances SQL Server nommées et multiples
SQL Server permet d’installer plusieurs instances de bases de données par serveur. Chaque instance est identifiée par un nom spécifique. Pour établir une connexion avec une instance nommée de SQL Server, vous pouvez soit spécifier le numéro de port de l’instance nommée (recommandé), soit spécifier le nom d’instance comme propriété d’URL JDBC ou comme propriété datasource. Si aucune propriété de nom d'instance ou de numéro de port n'est spécifiée, une connexion à l'instance par défaut est établie. Regardez les exemples suivants :
Pour spécifier un numéro de port, utilisez le format suivant :
jdbc:sqlserver://localhost:1433;encrypt=true;integratedSecurity=true;<more properties as required>;
Pour utiliser une propriété d’URL JDBC, utilisez le format suivant :
jdbc:sqlserver://localhost;encrypt=true;instanceName=instance1;integratedSecurity=true;<more properties as required>;
Échappement de valeurs dans l'URL de connexion
Il se peut que vous deviez protéger avec un caractère d’échappement certaines parties des valeurs de l’URL de connexion si elles comportent des caractères spéciaux (espaces, points-virgules, guillemets, etc.). Le pilote JDBC prend en charge l’échappement de ces caractères entre accolades. Par exemple, {;} échappe un point-virgule.
Avant la version 8.4, les valeurs protégées par un caractère d’échappement pouvaient contenir des caractères spéciaux (en particulier « = », « ; », « [] » ou un espace), mais pas d’accolades. Les valeurs qui doivent être échappées et qui contiennent des accolades doivent être ajoutées à une collection de propriétés.
Dans la version 8.4 et versions ultérieures, les valeurs échappées peuvent contenir des caractères spéciaux, y compris des accolades. Toutefois, les accolades fermantes doivent être placées dans une séquence d’échappement. Par exemple, avec le mot de passe pass";{}word
, une chaîne de connexion doit échapper le mot de passe comme suit :
jdbc:sqlserver://localhost;encrypt=true;username=MyUsername;password={pass";{}}word};
Notes
Un espace vide entre les accolades est un littéral qui n'est pas supprimé.
Connexion avec une authentification intégrée sous Windows
Le pilote JDBC prend en charge l’utilisation de l’authentification intégrée de type 2 sur les systèmes d’exploitation Windows au moyen de la propriété de chaîne de connexion integratedSecurity
. Pour utiliser l’authentification intégrée, copiez le fichier mssql-jdbc_auth-<version>-<arch>.dll dans un répertoire sur le chemin du système Windows de l’ordinateur où le pilote JDBC est installé.
Les fichiers mssql-jdbc_auth-<version>-<arch>.dll sont installés à l’emplacement suivant :
<répertoire d’installation >\sqljdbc_<version>\<language>\auth\
En ce qui concerne les systèmes d'exploitation pris en charge par Pilote Microsoft JDBC pour SQL Server, consultez Utilisation de l’authentification intégrée Kerberos pour se connecter à SQL Server afin d’obtenir la description d’une fonctionnalité ajoutée à Microsoft JDBC Driver 4.0 pour SQL Server, qui permet à une application de se connecter à une base de données à l'aide de l'authentification intégrée avec le Kerberos Type 4.
Notes
Si vous exécutez une machine virtuelle Java (JVM) 32 bits, utilisez le fichier mssql-jdbc_auth-<version>-<arch>.dll dans le dossier x86, même si la version du système d'exploitation est x64. Si vous exécutez une machine virtuelle Java (JVM) 64 bits sur un processeur x64, utilisez le fichier mssql-jdbc_auth-<version>-<arch>.dll dans le dossier x64.
Vous pouvez également définir la propriété système java.library.path afin de spécifier le répertoire du fichier mssql-jdbc_auth-<version>-<arch>.dll. Par exemple, si le pilote JDBC est installé dans le répertoire par défaut, vous pouvez spécifier l'emplacement de la DLL à l'aide de l'argument de machine virtuelle suivant lors du démarrage de l'application Java :
-Djava.library.path=C:\Microsoft JDBC Driver 6.4 for SQL Server\sqljdbc_<version>\enu\auth\x86
Connexion à l'aide d'adresses IPv6
Le pilote JDBC prend en charge l'utilisation d'adresses IPv6 avec la collection de propriétés de connexion et avec la propriété de chaîne de connexion serverName. La valeur initiale de serverName, comme jdbc:sqlserver://nom_serveur, n’est pas prise en charge pour les adresses IPv6 dans des chaînes de connexion. L’utilisation d’un nom au lieu d’une adresse IPv6 brute pour serverName fonctionne dans tous les cas pour la connexion. Les exemples suivants fournissent des informations complémentaires.
Pour utiliser la propriété serverName :
jdbc:sqlserver://;serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1;encrypt=true;integratedSecurity=true;
Pour utiliser la collection de propriétés :
Properties pro = new Properties();
pro.setProperty("serverName", "serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1");
Connection con = DriverManager.getConnection("jdbc:sqlserver://;encrypt=true;integratedSecurity=true;", pro);