Connexion à partir de Linux ou macOS
Cet article décrit comment créer une connexion à une base de données SQL Server.
Propriétés de connexion
Consultez Attributs et mots clés de chaîne de connexion et DSN pour découvrir tous les mots clés de chaîne de connexion et attributs pris en charge sur Linux et macOS.
Important
Quand vous vous connectez à une base de données qui utilise la mise en miroir de bases de données (qui a un partenaire de basculement), ne spécifiez pas le nom de la base de données dans la chaîne de connexion. Envoyez plutôt une commande use database_name pour vous connecter à la base de données avant l’exécution de vos requêtes.
La valeur passée au mot clé Pilote peut être :
le nom que vous avez utilisé quand vous avez installé le pilote,
le chemin de la bibliothèque du pilote, spécifié dans le fichier .ini du modèle utilisé pour installer le pilote.
Les DSN sont facultatifs. Vous pouvez utiliser un DSN pour définir des mots clés de la chaîne de connexion sous un nom DSN
que vous pouvez ensuite référencer dans la chaîne de connexion. Pour créer un nom de source de données, créez (si nécessaire) et modifiez le fichier ~/.odbc.ini (.odbc.ini
dans votre répertoire de base) pour un nom de source de données utilisateur uniquement accessible par l’utilisateur actuel, ou /etc/odbc.ini
pour un nom de source de données système (privilèges administratifs obligatoires). Le odbc.ini suivant est un exemple montrant les entrées minimales nécessaires pour un nom de source de données :
# [DSN name]
[MSSQLTest]
Driver = ODBC Driver 18 for SQL Server
# Server = [protocol:]server[,port]
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:
# Port isn't a valid keyword in the odbc.ini file
# for the Microsoft ODBC driver on Linux or macOS
#
Pour vous connecter à l’aide du DSN ci-dessus dans une chaîne de connexion, vous devez spécifier le mot clé DSN
comme suit : DSN=MSSQLTest;UID=my_username;PWD=my_password
La chaîne de connexion ci-dessus équivaut à spécifier une chaîne de connexion sans le mot clé DSN
comme suit : Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=my_password
Vous pouvez éventuellement spécifier le protocole et le port à connecter au serveur. Par exemple, Server=tcp:servername,12345. Le seul protocole pris en charge par les pilotes Linux et macOS est tcp
.
Pour vous connecter à une instance nommée sur un port statique, utilisez Server=servername,port_number. La connexion à un port dynamique n’est pas prise en charge avant la version 17.4.
Éventuellement, vous pouvez ajouter les informations de nom de source de données à un fichier de modèle, puis exécuter la commande suivante pour l’ajouter à ~/.odbc.ini
:
odbcinst -i -s -f <template_file>
Pour obtenir une documentation complète sur les fichiers ini et odbcinst
, consultez la documentation unixODBC. Pour les entrées dans le fichier odbc.ini
propre à ODBC Driver pour SQL Server, consultez Mots clés et attributs du nom de source de données et de la chaîne de connexion pour ceux qui sont pris en charge sur Linux et macOS.
Vous pouvez vérifier que votre pilote fonctionne en utilisant isql
pour tester la connexion, ou en exécutant cette commande :
bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>
Utilisation de TLS/SSL
Vous pouvez utiliser le protocole TLS (Transport Layer Security), anciennement SSL (Secure Sockets Layer), pour chiffrer les connexions à SQL Server. Le protocole TLS protège les noms d’utilisateur et mots de passe SQL Server sur le réseau. Il vérifie également l’identité du serveur à des fins de protection contre les attaques de l’intercepteur (« man-in-the-middle »).
L’activation du chiffrement renforce la sécurité au détriment des performances.
Pour plus d’informations, consultez Chiffrement des connexions à SQL Server et Utilisation du chiffrement sans validation.
Quels que soient les paramètres pour Encrypt et TrustServerCertificate, les informations d’identification de connexion serveur (nom d’utilisateur et mot de passe) sont toujours chiffrées. Les tableaux suivants montrent l’effet des paramètres Encrypt et TrustServerCertificate.
ODBC Driver 18 et versions ultérieures
Paramètre de chiffrement | Faire confiance au certificat de serveur | Chiffrement forcé du serveur | Résultat |
---|---|---|---|
Non | Non | Non | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur ne sont pas chiffrées. |
Non | Oui | Non | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur ne sont pas chiffrées. |
Oui | No | Non | Le certificat de serveur est vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Oui | Oui | Non | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Non | Non | Oui | Le certificat de serveur est vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Non | Oui | Oui | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Oui | No | Oui | Le certificat de serveur est vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Oui | Oui | Oui | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Strict | - | - | TrustServerCertificate est ignoré. Le certificat de serveur est vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Notes
Strict est uniquement disponible sur les serveurs qui prennent en charge les connexions TDS 8.0.
ODBC Driver 17 et versions antérieures
Paramètre de chiffrement | Faire confiance au certificat de serveur | Chiffrement forcé du serveur | Résultat |
---|---|---|---|
Non | Non | Non | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur ne sont pas chiffrées. |
Non | Oui | Non | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur ne sont pas chiffrées. |
Oui | No | Non | Le certificat de serveur est vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Oui | Oui | Non | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Non | Non | Oui | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Non | Oui | Oui | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Oui | No | Oui | Le certificat de serveur est vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Oui | Oui | Oui | Le certificat de serveur n’est pas vérifié. Les données envoyées entre le client et le serveur sont chiffrées. |
Quand vous utilisez le chiffrement de la connexion, le nom (ou l’adresse IP) indiqué dans un nom commun d’objet ou autre nom de l’objet dans un certificat TLS/SSL SQL Server doit correspondre exactement au nom (ou à l’adresse IP) du serveur spécifié dans la chaîne de connexion. Le mot clé HostnameInCertificate
(v18.0+) peut être utilisé pour spécifier un autre nom à comparer avec les noms figurant dans le certificat TLS/SSL. Lorsque le mot clé est spécifié, le certificat TLS/SSL SQL Server doit correspondre à l’un des noms de serveur ou au HostnameInCertificate
.
Par défaut, les connexions chiffrées vérifient toujours le certificat du serveur. Toutefois, si vous vous connectez à un serveur avec un certificat auto-signé et que vous n’utilisez pas le mode de chiffrement strict, vous pouvez ajouter l’option TrustServerCertificate
pour contourner la vérification du certificat par rapport à la liste des autorités de certification approuvées :
Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES
Dans le mode de chiffrement strict, le certificat est toujours vérifié. Comme option de validation de certificat standard, le mot clé ServerCertificate
(v18.1+) peut être utilisé pour spécifier le chemin d’accès vers un fichier de certificat avec lequel comparer le certificat SQL Server. Cette option est disponible uniquement lors de l’utilisation du chiffrement strict. Les formats de certificat acceptés sont PEM, DER et CER. S’il est spécifié, le certificat SQL Server est vérifié en contrôlant si le ServerCertificate
fourni est une correspondance exacte.
TLS sur Linux et macOS utilise la bibliothèque OpenSSL. Le tableau suivant présente les versions minimales prises en charge d’OpenSSL et les emplacements du magasin d’approbations de certificat par défaut pour chaque plateforme :
Plateforme | Version OpenSSL minimale | Emplacement du magasin d’approbations de certificat par défaut |
---|---|---|
Debian 10, 11, 12 | 1.1.1 | /etc/ssl/certs |
Debian 9 | 1.1.0 | /etc/ssl/certs |
Debian 8.71 | 1.0.1 | /etc/ssl/certs |
OS X 10.11, macOS | 1.0.2 | /usr/local/etc/openssl/certs |
Red Hat Enterprise Linux 9 | 3.0.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 8 | 1.1.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 7 | 1.0.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 6 | 1.0.0-10 | /etc/pki/tls/cert.pem |
SUSE Linux Enterprise 15 | 1.1.0 | /etc/ssl/certs |
SUSE Linux Enterprise 11, 12 | 1.0.1 | /etc/ssl/certs |
Ubuntu 22.04, 23.04 | 3.0.2 | /etc/ssl/certs |
Ubuntu 20.04 | 1.1.1 | /etc/ssl/certs |
Ubuntu 18.04 | 1.1.0 | /etc/ssl/certs |
Ubuntu 16.04 | 1.0.2 | /etc/ssl/certs |
Ubuntu 14.04 | 1.0.1 | /etc/ssl/certs |
Alpine 3.17, 3.18 | 3.0.1 | /etc/ssl/certs |
Vous pouvez également spécifier le chiffrement dans la chaîne de connexion à l’aide de l’option Encrypt
lorsque vous vous connectez avec SQLDriverConnect.
Ajustement des paramètres TCP Keep-Alive
À partir d’ODBC Driver 17.4, vous pouvez définir la fréquence à laquelle le pilote envoie des paquets Keep-Alive et les retransmet quand une réponse n’est pas reçue.
Pour cela, ajoutez les paramètres suivants à la section du pilote dans odbcinst.ini
, ou à la section du DSN dans odbc.ini
. Lors de la connexion à un DSN, le pilote utilise les paramètres de la section du DSN, le cas échéant. Dans le cas contraire, ou si vous vous connectez avec une chaîne de connexion uniquement, il utilisera les paramètres de la section du pilote dans odbcinst.ini
. Si le paramètre n’est présent dans aucun de ces emplacements, le pilote utilise la valeur par défaut.
À partir de la version 17.8 du pilote ODBC, les mots clés KeepAlive
et KeepAliveInterval
peuvent être spécifiés dans la chaîne de connexion.
KeepAlive=<integer>
contrôle la fréquence à laquelle TCP tente de vérifier qu’une connexion inactive est toujours intacte en envoyant un paquet keep-alive. La valeur par défaut est 30 secondes.KeepAliveInterval=<integer>
détermine l’intervalle qui sépare les retransmissions keep-alive jusqu’à ce qu’une réponse soit reçue. La valeur par défaut est 1 seconde.