Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Linux üzerinde SQL Server
SQL Server 2017 (14.x) kapsayıcıları varsayılan olarak kök kullanıcı olarak başlatılır ve bu da bazı güvenlik sorunlarına neden olabilir. Bu makalede, SQL Server Linux kapsayıcılarını çalıştırırken sahip olduğunuz güvenlik seçenekleri ve kök olmayan kullanıcı olarak SQL Server kapsayıcısı oluşturma hakkında bilgi verilmektedir.
Bu makaledeki örneklerde Docker kullandığınız varsayılır, ancak kubernetes gibi diğer kapsayıcı düzenleme araçlarına da aynı ilkeleri uygulayabilirsiniz.
Root yetkisi olmayan SQL Server 2017 kapsayıcılarını oluşturma ve çalıştırma
SQL Server 2017 (14.x) kapsayıcısını, mssql (kök olmayan) kullanıcı olarak başlatmak için bu adımları izleyin.
Note
SQL Server 2019 (15.x) ve sonraki sürümleri için kapsayıcılar otomatik olarak kök olmayan olarak başlatılırken, SQL Server 2017 (14.x) kapsayıcıları varsayılan olarak kök olarak başlar. Daha fazla bilgi için, ana bilgisayarda farklı bir root olmayan kullanıcı olarak konteyneri çalıştır sayfasına bakabilirsiniz.
kök olmayan SQL Server kapsayıcıları için örnek Dockerfile dosyasını indirin ve
Dockerfileolarak kaydedin.Dockerfile'ı içeren dizinde kök olmayan SQL Server konteynerini oluşturmak için aşağıdaki komutu çalıştırın:
cd <path to Dockerfile directory> docker build -t 2017-latest-non-root .Kapsayıcıyı başlatın.
Important
SA_PASSWORDortam değişkeni kullanım dışıdır. Bunun yerineMSSQL_SA_PASSWORDkullanın.docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE --name sql1 -p 1433:1433 -d 2017-latest-non-rootNote
Kök olmayan SQL Server kapsayıcılarının sorun giderme amacıyla dökümler oluşturması için
--cap-add SYS_PTRACEbayrağı gereklidir.Konteynerin root olmayan bir kullanıcı olarak çalıştığını kontrol edin:
docker exec -it sql1 bashÇalıştırın
whoami, bu, kapsayıcı içinde çalışan kullanıcıyı döndüren bir işlemdir.whoami
Kapsayıcıyı konakta kök olmayan farklı bir kullanıcı olarak çalıştırma
SQL Server kapsayıcısını farklı bir kök olmayan kullanıcı olarak çalıştırmak için -u komutuna docker run bayrağını ekleyin. Kök olmayan kapsayıcı, kök olmayan kullanıcının erişebileceği bir birim root'e bağlanmadığı takdirde /var/opt/mssql grubunun bir parçası olarak çalışması zorunluluğuna sahiptir.
root grubu, kök olmayan kullanıcıya ek kök izinleri vermez.
UID 4000 ile kullanıcı olarak çalıştırma
SQL Server'ı özel bir UID ile başlatabilirsiniz. Örneğin, aşağıdaki komut UID 4000 ile SQL Server'ı başlatır:
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
Warning
SQL Server konteynerinin, mssql veya root gibi adlandırılmış bir kullanıcıya sahip olduğundan emin olun. Aksi takdirde, sqlcmd konteyner içinde çalışamaz. Kapsayıcı içinde whoami çalıştırarak SQL Server kapsayıcısının adlandırılmış kullanıcı olarak çalışıp çalışmadığını de kontrol edebilirsiniz.
Kök olmayan kapsayıcıyı kök kullanıcı olarak çalıştırma
Gerekirse root olmayan konteyneri root kullanıcı olarak çalıştırabilirsiniz, bu da daha yüksek ayrıcalıklara sahip olduğu için tüm dosya izinlerini konteynere otomatik olarak verir.
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
Konak makinenizde kullanıcı olarak çalıştırma
SQL Server'ı aşağıdaki komutla konak makinede var olan bir kullanıcıyla başlatabilirsiniz:
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
Farklı bir kullanıcı ve grup olarak çalıştır
SQL Server'ı özel bir kullanıcı ve grupla başlatabilirsiniz. Bu örnekte, bağlı birimin konak makinedeki kullanıcı veya grup için yapılandırılmış izinleri vardır.
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
Kök olmayan kapsayıcılar için kalıcı depolama izinlerini yapılandırma
Root olmayan kullanıcının monte edilmiş hacimlerdeki veritabanı dosyalarına erişmesini sağlamak için, konteyneri çalıştırdığınız kullanıcı veya grubun kalıcı dosya depolamadan okuyup yazabildiğinden emin olun.
Bu komutla veritabanı dosyalarının geçerli sahipliğini alabilirsiniz.
ls -ll <database file dir>
SQL Server'ın kalıcı veritabanı dosyalarına erişimi yoksa aşağıdaki komutlardan birini çalıştırın.
Kök gruba veritabanı dosyalarına okuma/yazma erişimi verme
Kök olmayan SQL Server kapsayıcısının veritabanı dosyalarına erişebilmesi için aşağıdaki dizinlere kök grup izinleri verin.
chgrp -R 0 <database file dir>
chmod -R g=u <database file dir>
Kök olmayan kullanıcıyı dosyaların sahibi olarak ayarlayın
Sahip, varsayılan kök olmayan kullanıcı veya belirtmek istediğiniz diğer kök olmayan kullanıcı olabilir. Bu örnekte UID 10001'i kök olmayan kullanıcı olarak ayarlamış olacaksınız.
chown -R 10001:0 <database file dir>
SQL Server Linux kapsayıcılarına bağlantıları şifreleme
Important
Active Directory kimlik doğrulama veya şifreleme seçeneklerini, örneğin Saydam Veri Şifrelemesi (TDE) ve TLS for Linux üzerinde SQL Server veya konteynerleri için yapılandırdığınızda, keytab, sertifikalar ve makine anahtarı gibi birkaç dosya varsayılan olarak klasörde /var/opt/mssql/secretsoluşturulur ve erişim varsayılan mssqlroot olarak kullanıcılarla sınırlıdır. SQL Server kapsayıcıları için kalıcı depolamayı yapılandırırken aynı erişim stratejisini kullanın; kapsayıcı içindeki /var/opt/mssql/secrets klasörüne eşlenen konak veya paylaşılan birimdeki yolun korunduğundan ve yalnızca konak üzerindeki mssql ve root kullanıcılarının erişimiyle sınırlı olduğundan emin olun. Bu yol/klasöre erişimin gizliliği ihlal edilirse, kötü amaçlı bir kullanıcı bu kritik dosyalara erişim elde ederek şifreleme hiyerarşisini ve/veya Active Directory yapılandırmalarını tehlikeye atabilir.
SQL Server Linux kapsayıcılarına bağlantıları şifrelemek için aşağıdaki gereksinimleresahip bir sertifikaya ihtiyacınız vardır.
Aşağıda SQL Server Linux kapsayıcılarına bağlantının nasıl şifreleneceğine ilişkin bir örnek verilmiştir. Burada üretim senaryoları için kullanılmaması gereken kendinden imzalı bir sertifika kullanıyorsunuz. Bu tür ortamlar için bunun yerine CA sertifikalarını kullanmanız gerekir.
Yalnızca test ve üretim dışı ortamlar için uygun olan otomatik olarak imzalanan bir sertifika oluşturun.
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=sql1.contoso.com' -keyout /container/sql1/mssql.key -out /container/sql1/mssql.pem -days 365Önceki kod örneğinde
sql1SQL kapsayıcısının ana bilgisayar adıdır, bu nedenle bu kapsayıcıya bağlanırken bağlantı dizesinde kullanılan adsql1.contoso.com,5434olacaktır. Önceki komutu çalıştırmadan önce klasör yolunun/container/sql1/zaten var olduğundan da emin olmanız gerekir.Dosyaları SQL Server kapsayıcısına bağladığınızda hatalardan kaçınmak için
mssql.pemvemssql.keydosyalarında doğru izinleri ayarladığınızdan emin olun:chmod 440 /container/sql1/mssql.pem chmod 440 /container/sql1/mssql.keyŞimdi sunucu tarafından başlatılan şifrelemeyi etkinleştirmek için aşağıdaki içerikle bir
mssql.confdosya oluşturun. İstemci tarafından başlatılan şifreleme için, son satırı 'ye değiştirinforceencryption = 0.[network] tlscert = /etc/ssl/certs/mssql.pem tlskey = /etc/ssl/private/mssql.key tlsprotocols = 1.2 forceencryption = 1Note
Bazı Linux dağıtımları için, sertifikayı ve anahtarı depolama yolu sırasıyla
/etc/pki/tls/certs/ve/etc/pki/tls/private/olabilir. SQL Server kapsayıcıları içinmssql.confgüncelleştirmeden önce yolu kontrol edin. içindemssql.confayarladığınız konum, kapsayıcıdaki SQL Server'ın sertifikayı ve anahtarını arayacağı konumdur. Bu durumda, o konum/etc/ssl/certs/ve/etc/ssl/private/.mssql.confdosyası da/container/sql1/aynı klasör konumu altında oluşturulur. Yukarıdaki adımları çalıştırdıktan sonra üç dosyanız olmalıdır:mssql.confklasöründemssql.key,mssql.pemvesql1.SQL Server kapsayıcısını aşağıdaki komutla dağıtın (
<password>geçerli bir parolayla değiştirin):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-latestÖnceki komutta, ,
mssql.pem, vemssql.keydosyalarını konteynere montemssql.confettiniz ve konteynerdeki SQL Server varsayılan portu 1433'ü ana bilgisayardaki 5434 portuna eşlediniz.Note
Red Hat Enterprise Linux 8 ve sonraki sürümlerini kullanıyorsanız,
podman runyerinedocker runkomutunu da kullanabilirsiniz.
Müşteri başlatan şifrelemede belgelenen "Sertifikayı istemci makinenizde kaydet" ve "Bağlantı dizileri örneği" bölümlerini takip ederek Linux üzerinde SQL Server konteynerlerine bağlantıları şifrelemeye başlayın.
İlgili içerik
- hızlı başlangıç kılavuzunu takip ederek Docker'da SQL Server 2017 (14.x) kapsayıcı imajlarını kullanmaya başlayın.
- hızlı başlangıç ilerleyerek Docker'da SQL Server 2019 (15.x) kapsayıcı görüntülerini kullanmaya başlayın
- Docker'da SQL Server 2022 (16.x) kapsayıcı görüntülerini kullanmaya başlamak için hızlı başlangıç kılavuzu ile başlayın.
- Hızlı başlangıcı izleyerek Docker'da SQL Server 2025 (17.x) kapsayıcı görüntülerini kullanmaya başlama