Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di Linux
Kontainer SQL Server 2017 (14.x) dimulai sebagai pengguna root secara default, yang dapat menyebabkan beberapa masalah keamanan. Artikel ini membahas tentang opsi keamanan yang Anda miliki saat menjalankan kontainer SQL Server Linux, dan cara membangun kontainer SQL Server sebagai pengguna non-root.
Contoh dalam artikel ini mengasumsikan bahwa Anda menggunakan Docker, tetapi Anda dapat menerapkan prinsip yang sama ke alat orkestrasi kontainer lainnya termasuk Kubernetes.
Membangun dan menjalankan kontainer SQL Server 2017 non-root
Ikuti langkah-langkah ini untuk membangun kontainer SQL Server 2017 (14.x) yang akan dijalankan sebagai pengguna mssql (non-root).
Catatan
Kontainer untuk SQL Server 2019 (15.x) dan versi yang lebih baru secara otomatis dimulai sebagai non-root, sementara kontainer SQL Server 2017 (14.x) dimulai sebagai root secara default. Untuk informasi selengkapnya tentang menjalankan kontainer SQL Server sebagai non-root, lihat Menjaga Keamanan Kontainer Linux SQL Server.
Unduh file contoh Docker untuk kontainer SQL Server non-root dan simpan sebagai
dockerfile.Jalankan perintah berikut dalam konteks direktori dockerfile untuk membangun kontainer SQL Server non-root:
cd <path to dockerfile> docker build -t 2017-latest-non-root .Mulai kontainer.
Penting
Variabel
SA_PASSWORDlingkungan tidak digunakan lagi. GunakanMSSQL_SA_PASSWORDsebagai gantinya.docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE --name sql1 -p 1433:1433 -d 2017-latest-non-rootCatatan
Bendera
--cap-add SYS_PTRACEdiperlukan untuk kontainer SQL Server non-root untuk menghasilkan cadangan untuk tujuan pemecahan masalah.Periksa apakah kontainer berjalan sebagai pengguna non-root:
docker exec -it sql1 bashJalankan
whoami, yang mengembalikan pengguna yang aktif di dalam kontainer.whoami
Jalankan kontainer sebagai pengguna non-root yang berbeda pada host
Untuk menjalankan kontainer SQL Server sebagai pengguna non-root yang berbeda, tambahkan -u flag pada perintah docker run. Kontainer non-root memiliki batasan bahwa ia harus dijalankan sebagai bagian dari grup root kecuali jika sebuah volume dipasang ke /var/opt/mssql yang dapat diakses oleh pengguna non-root. Grup root tidak memberikan izin root tambahan kepada pengguna non-root.
Jalankan sebagai pengguna dengan UID 4000
Anda dapat memulai SQL Server dengan UID kustom. Misalnya, perintah berikut memulai SQL Server dengan UID 4000:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u 4000:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Peringatan
Pastikan bahwa kontainer SQL Server memiliki pengguna bernama seperti mssql atau root, jika tidak , sqlcmd tidak dapat berjalan dalam kontainer. Anda dapat memeriksa apakah kontainer SQL Server berjalan sebagai pengguna bernama dengan menjalankan whoami dalam kontainer.
Jalankan kontainer non-root sebagai pengguna root
Anda dapat menjalankan kontainer non-root sebagai pengguna root jika perlu, yang juga memberikan semua izin file secara otomatis ke kontainer, karena memiliki hak istimewa yang lebih tinggi.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -u 0:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Jalankan sebagai pengguna di komputer host Anda
Anda dapat memulai SQL Server dengan pengguna yang ada di komputer host dengan perintah berikut:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u $(id -u myusername):0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Jalankan sebagai pengguna dan grup yang berbeda
Anda dapat memulai SQL Server dengan pengguna dan grup kustom. Dalam contoh ini, volume yang dipasang memiliki izin yang dikonfigurasi untuk pengguna atau grup pada komputer host.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u $(id -u myusername):$(id -g myusername) -v /path/to/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Mengonfigurasi izin penyimpanan persisten untuk kontainer non-root
Untuk mengizinkan pengguna non-root mengakses file database yang ada pada volume yang dipasang, pastikan bahwa pengguna atau grup tempat Anda menjalankan kontainer, dapat membaca dari, dan menulis ke, penyimpanan file persisten.
Anda bisa mendapatkan kepemilikan file database saat ini dengan perintah ini.
ls -ll <database file dir>
Jalankan salah satu perintah berikut jika SQL Server tidak memiliki akses ke file database yang bertahan.
Memberikan akses baca/tulis kepada grup root untuk file database
Berikan izin grup akar ke direktori berikut sehingga kontainer SQL Server non-root memiliki akses ke file database.
chgrp -R 0 <database file dir>
chmod -R g=u <database file dir>
Atur pengguna non-root sebagai pemilik file
Pemilik dapat menjadi pengguna non-root default, atau pengguna non-root lainnya yang ingin Anda tentukan. Dalam contoh ini, Anda menetapkan UID 10001 sebagai pengguna non-root.
chown -R 10001:0 <database file dir>
Mengenkripsi koneksi ke kontainer SQL Server Linux
Penting
Saat Anda mengonfigurasi opsi autentikasi atau enkripsi Direktori Aktif seperti Transparent Data Encryption (TDE) dan SSL/TLS untuk SQL Server di Linux atau kontainer, ada beberapa file, seperti keytab, sertifikat, dan kunci mesin, yang dibuat secara default di bawah folder /var/opt/mssql/secrets, dan akses ke yang dibatasi secara default ke mssql dan root pengguna. Saat Anda mengonfigurasi penyimpanan persisten untuk kontainer SQL Server, gunakan strategi akses yang sama, memastikan bahwa jalur pada host atau volume bersama yang dipetakan ke /var/opt/mssql/secrets folder di dalam kontainer dilindungi dan hanya dapat diakses oleh mssql pengguna dan root di host juga. Jika akses ke jalur/folder ini disusupi, pengguna berbahaya dapat memperoleh akses ke file-file penting ini, mengorbankan hierarki enkripsi dan/atau konfigurasi Direktori Aktif.
Untuk mengenkripsi koneksi ke kontainer SQL Server Linux, Anda memerlukan sertifikat dengan persyaratan berikut.
Berikut ini adalah contoh bagaimana koneksi dapat dienkripsi ke kontainer SQL Server Linux. Di sini Anda menggunakan sertifikat yang ditandatangani sendiri, yang seharusnya tidak digunakan untuk skenario produksi. Untuk lingkungan tersebut, Anda harus menggunakan sertifikat CA sebagai gantinya.
Buat sertifikat yang ditandatangani sendiri, yang cocok untuk lingkungan pengujian dan non-produksi saja.
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=sql1.contoso.com' -keyout /container/sql1/mssql.key -out /container/sql1/mssql.pem -days 365Dalam sampel kode sebelumnya,
sql1adalah nama host kontainer SQL, jadi saat menyambungkan ke kontainer ini, nama yang digunakan dalam string koneksi akan menjadisql1.contoso.com,port. Anda juga harus memastikan bahwa jalur/container/sql1/folder sudah ada sebelum menjalankan perintah sebelumnya.Pastikan Anda mengatur izin yang tepat pada
mssql.keyfile danmssql.pem, sehingga Anda menghindari kesalahan saat Memasang file ke kontainer SQL Server:chmod 440 /container/sql1/mssql.pem chmod 440 /container/sql1/mssql.keySekarang buat
mssql.conffile dengan konten berikut untuk mengaktifkan enkripsi Yang Dimulai Server. Untuk enkripsi yang dimulai Klien, ubah baris terakhir menjadiforceencryption = 0.[network] tlscert = /etc/ssl/certs/mssql.pem tlskey = /etc/ssl/private/mssql.key tlsprotocols = 1.2 forceencryption = 1Catatan
Untuk beberapa distribusi Linux, jalur untuk menyimpan sertifikat dan kunci juga bisa
/etc/pki/tls/certs/dan/etc/pki/tls/private/masing-masing. Verifikasi jalur sebelum memperbaruimssql.confuntuk kontainer SQL Server. Lokasi yangmssql.confAnda tetapkan di adalah lokasi di mana SQL Server dalam kontainer akan mencari sertifikat dan kuncinya. Dalam hal ini, lokasi itu adalah/etc/ssl/certs/dan/etc/ssl/private/.File
mssql.confjuga dibuat di bawah lokasi/container/sql1/folder yang sama . Setelah menjalankan langkah-langkah di atas, Anda harus memiliki tiga file:mssql.conf,mssql.key, danmssql.pemdisql1folder .Sebarkan kontainer SQL Server dengan perintah berikut (ganti
<password>dengan kata sandi yang valid):docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5434:1433 --name sql1 -h sql1 -v /container/sql1/mssql.conf:/var/opt/mssql/mssql.conf -v /container/sql1/mssql.pem:/etc/ssl/certs/mssql.pem -v /container/sql1/mssql.key:/etc/ssl/private/mssql.key -d mcr.microsoft.com/mssql/server:2019-latestDalam perintah sebelumnya, Anda memasang
mssql.conffile , ,mssql.pemdanmssql.keyke kontainer dan memetakan port 1433 (port default SQL Server) dalam kontainer ke port 5434 pada host.Catatan
Jika Anda menggunakan Red Hat Enterprise Linux 8 dan versi yang lebih baru, Anda juga dapat menggunakan
podman runperintah alih-alihdocker run.
Ikuti bagian "Daftarkan sertifikat di komputer klien Anda" dan "Contoh string koneksi" yang didokumentasikan dalam Enkripsi yang Dimulai oleh Klien untuk mulai melakukan enkripsi koneksi ke SQL Server pada kontainer Linux.
Konten terkait
- Mulai menggunakan gambar kontainer SQL Server 2017 (14.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2019 (15.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2022 (16.x) di Docker dengan melalui mulai cepat
- Mulai menggunakan gambar kontainer SQL Server 2025 (17.x) di Docker dengan melalui mulai cepat