Sebetulnya untuk instalasi sqlsrv bisa dilihat di webnya microsoft tapi gak papa, tak tambahin disini aja buat catatan
Install ODBC Driver
ini buat centos 8 ya, dan ambilnya dari rhel8 curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo exit sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts sudo ACCEPT_EULA=Y yum install msodbcsql17 # cuman buat koneksi via CLI sudo ACCEPT_EULA=Y yum install mssql-tools echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc sudo yum install unixODBC-devel
Install prequsites sebelum install sqlsrv
dnf install php-xml php-pdo php-pear php-devel
Di gw muncul error pada saat install php-devel padahal sebelumnya di Centos 7 kaga. Jadi kalao install di Centos 8 harus jalankan perintah ini dulu:
dnf config-manager --set-enabled PowerTools
baru jalankan yum install php-devel. dan kebetulan error ahahhahaha, ternyata diblock outbound 80 dari servernya, ta matiin dulu firewallnya, males bikin commandnya
systemctl stop firewalld
Install sqlsrv
pecl install sqlsrv pecl install pdo_sqlsrv
kondisi firewall dan SELinux mati ya, kalau idup ya musti disetting dulu koneksinya yg dibolehkan
setelah selesai, bikin koneksi sederhana pake php trus jalankan
$hostname = 'namaserver'; $username = 'namauser'; $password = 'katasandi'; $database = 'namadatabase'; $serverName = $hostname; $connectionOptions = array( "database" => $database, "uid" => $username, "pwd" => $password ); // Establishes the connection $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(formatErrors(sqlsrv_errors())); } // Select Query $tsql = "SELECT @@Version AS SQL_VERSION"; // Executes the query $stmt = sqlsrv_query($conn, $tsql); // Error handling if ($stmt === false) { die(formatErrors(sqlsrv_errors())); }
dannnn ga jalan, muter2 mulu. Bingunglah gw, gw cobain koneksi pake cli dengan command :
sqlcmd -S namaserver -U namauser -P password -d namadatabase -Q "select * from tablenya"
dan hasilnya tetep ga bisa
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]. Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Client unable to establish connection.
Untungnya, kalo di CLI jelas terpampang errornya, tadi sempet gw state; ga jalan muter2 mulu. itu masih mending. kalau di Codeigniter, dia ga bisa return object hasil query! kan bangke, kaga muncul error detailnya, cuman muncul :
Message: Call to a member function num_rows() on bool
kampret bener, gugling sampe bego jawabannya macem2: salah querylah, tablenya ga ada lah, dan jawaban2 lain yang tidak menyelesaikan!
Dari error di cli, gw ambil kesimpulan konfigurasi SQL Servernya yang dodol, dia masih pake TLS1.0 (untung pernah dibahas di docker, jadi bisa memperkirakan errornya dan ngerti keywordnya apa. coba kalo belum juga pusing itu).
Nah kalo ubuntu gampang, konfigurasi adanya di /etc/ssl/openssl.conf, di Centos ini bangke banget! di folder /etc/ssl isinya cuman link ke folder /etc/pki/certs kalo ga salah dan konfigurasi openssl ada di folder /etc/pki/tls. Sialnya isi konfigurasi beda sama yang di ubuntu. kupret banget!
Akhirnya brosang brosing kesana kemari, nemu web bahasa jepang yang gw juga ngeraba artinya. Jadi di Centos 8 ini secara default crypto-policiesnya make yang baru (kemungkinan TLS2.0). Di dalam folder /etc/crypto-policies ada file config (jangan nanya nemunya gimana, gw juga lupa), di file itu ada statement gini:
* LEGACY: Ensures maximum compatibility with legacy systems (64-bit security) * DEFAULT: A reasonable default for today's standards (112-bit security).
tuh kan bener! dia pake today standards, sementara SQL Server disana koneksi sslnya jadul. Akhirnya gw edit file config di dalam /etc/crypto-policies, dari value awal DEFAULT gw ubah ke LEGACY. kemudian jalankan command
[root@namaserver ~]# update-crypto-policies Setting system policy to LEGACY Note: System-wide crypto policies are applied on application start-up. It is recommended to restart the system for the change of policies to fully take place.
Restart dan langsung berhasil koneksinya ke SQL Server!!
Semoga bisa membantu yang kesulitan kek gw tadi, terima kasih