ด้วยความจำเป็นที่ต้องเชื่อมต่อเรียกข้อมูลจาก MSSQL DB ด้วย Python บน Linux server ทำให้ต้องค้นหาหนทางในการทำให้เกิดขึ้น

วิธีการด้านล่างนี้ ทำบน Debian 11 bulleyes หากใช้เป็น OS อื่น Version อื่น ให้เข้าไปดู repo source ที่ถูกต้องในอ้างอิง

ติดตั้ง ODBC และ MSSQL Driver

  • เริ่มต้นด้วยการติดตั้ง unixodbc กับ libgssapi-krb5-2
sudo apt install -y unixodbc-dev libgssapi-krb5-2
  • ทำการเพิ่ม MS ODBC repo
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

sudo curl https://packages.microsoft.com/config/debian/11/prod.list -o /etc/apt/sources.list.d/mssql-release.list
  • ทำการ update package list และติดตั้ง msodbcsql18 และ mssql-tools18
sudo apt update
sudo apt install -y msodbcsql18 mssql-tools18
  • หากไม่ติด error อะไร ก็เป็นอันเรียบร้อยสำหรับการติดตั้ง ODBC MSSQL driver บน Debian ตรวจสอบว่าใน /etc มีไฟล์ odbc.ini กับ odbcinst.ini หรือไม่

ทดสอบใน Python

  • ในการใช้ Python เข้า MSSQL นั้น ต้องติดตั้ง pyodbc ก่อน
[email protected]:~/pyodbc$ python3 -m venv venv
[email protected]:~/pyodbc$ . venv/bin/activate
(venv) [email protected]:~/pyodbc$ pip install pyodbc
Collecting pyodbc
  Downloading pyodbc-4.0.35-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329 kB)
     |████████████████████████████████| 329 kB 1.7 MB/s 
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.35
(venv) [email protected]:~/pyodbc$ python
Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyodbc
>>> conn = pyodbc.connect('DRIVER={ODBC Driver 18 for SQL Server};SERVER=yourserver;DATABASE=yourdb;ENCRYPT=yes;UID=youruser;PWD=yourpassword)
  • หากพบปัญหาด้วย error ประมาณนี้ อันนี้จะเป็นปัญหาเรื่องของ SSL protocol เท่าที่ศึกษาหาข้อมูลมา ตัว MSSQL server ใช้ protocol version เก่า แต่บน Debian OpenSSL นั้นเป็น version ใหม่
pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol] (-1) (SQLDriverConnect)')
  • ปรับลด protocol version ลง โดยแก้ไขไฟล์ /etc/ssl/openssl.cnf
MinProtocol = TLSv1.0
CipherString = [email protected]=1

อ้างอิง

  • https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16

Leave a Reply