Linux üzerinde SQL Server'ın güvenlik özellikleri için izlenecek yol

Şunlar için geçerlidir:Linux üzerinde SQL Server

SQL Server'ı yeni kullanan bir Linux kullanıcısıysanız, aşağıdaki görevler güvenlik görevlerinin bazılarına yol gösterir. Bu görevler Linux'a özgü ya da benzersiz değil, ama daha fazla araştırmanız gereken alanlar hakkında fikir veriyorlar. Her örnek, o alana ait detaylı dokümantasyona bağlantı verir.

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

Oturum açma ve veritabanı kullanıcısı oluşturma

Veritabanında bu CREATE LOGIN ifadeyle giriş master yaparak başkalarına SQL Server'a erişim izni verin. Örneğin:

CREATE LOGIN Larry
    WITH PASSWORD = '<password>';

Caution

Parolanız varsayılan SQL Server password ilkesini izlemelidir. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

Oturumlar SQL Server'a bağlanabilir ve master veritabanına (sınırlı izinlerle) erişebilir. Kullanıcı veritabanına bağlanmak için, oturum açma bilgilerinin veritabanı düzeyinde veritabanı kullanıcısı olarak adlandırılan ilgili bir kimliğe sahip olması gerekir. Kullanıcılar her veritabanına özgüdür, bu yüzden erişim izni vermek için her veritabanında ayrı ayrı oluşturmalısınız.

Aşağıdaki örnek veritabanına geçer AdventureWorks2025 ve ardından CREATE USER bu ifadeyi kullanarak giriş adıyla Larryeşlenen bir kullanıcı adı Larry oluşturulur. Giriş ve kullanıcı birbirine bağlı (eşlenmiş olsa da), farklı nesnelerdir. Oturum açma, sunucu düzeyinde bir ilkedir. Kullanıcı, veritabanı düzeyinde bir sorumludur.

USE AdventureWorks2025;
GO

CREATE USER Larry;
GO
  • SQL Server yönetici hesabı herhangi bir veritabanına bağlanabilir ve herhangi bir veritabanında daha fazla oturum açma ve kullanıcı oluşturabilir.
  • Bir veritabanı oluşturduğunuzda, veritabanı sahibi olursunuz ve o veritabanına bağlanabilirsiniz. Veritabanı sahipleri daha fazla kullanıcı oluşturabilir.

Daha sonra ALTER ANY LOGIN iznini vererek diğer oturum açma bilgilerine daha fazla oturum açma bilgisi oluşturma yetkisi verebilirsiniz. Veritabanında, kullanıcılara ALTER ANY USER izni vererek diğer kullanıcılar oluşturma yetkisi verebilirsiniz. Örneğin:

GRANT ALTER ANY LOGIN TO Larry;
GO

USE AdventureWorks2025;
GO

GRANT ALTER ANY USER TO Jerry;
GO

Artık giriş Larry daha fazla giriş oluşturabilir ve kullanıcı Jerry daha fazla kullanıcı oluşturabilir.

En az ayrıcalıkla erişim verme

Yöneticiler ve veritabanı sahipleri genellikle bir kullanıcı veritabanına bağlanan ilk kullanıcılardır. Bu hesapların veritabanında tüm izinleri var. Bu hesapları daha az izin gerektiren görevler için kullanmayın.

Yeni başlıyorsanız, yerleşik sabit veritabanı rolleriyle bazı genel izin kategorilerini atalayabilirsiniz. Örneğin, db_datareader sabit veritabanı rolü veritabanındaki tüm tabloları okuyabilir ama değişiklik yapamaz. Bu ifadeyle sabit bir veritabanı rolünde ALTER ROLE üyelik ver. Aşağıdaki örnek, kullanıcıyı Jerrydb_datareader sabit veritabanı rolüne ekler.

USE AdventureWorks2025;
GO

ALTER ROLE db_datareader ADD MEMBER Jerry;

Sabit veritabanı rollerinin listesi için bkz. Veritabanı düzeyinde roller.

Daha sonra, verilerinize daha hassas erişimi yapılandırmaya hazır olduğunuzda (şiddetle tavsiye edilir), bu CREATE ROLE ifadeyle kendi kullanıcı tanımlı veritabanı rollerinizi oluşturun. Ardından özel rollerinize belirli ayrıntılı izinler atayın.

Örneğin, aşağıdaki iyimler , Salesadlı bir veritabanı rolü oluşturur, gruba Sales tablodan satır Orders okuma, güncelleme ve silme yeteneği verir ve ardından kullanıcıyı Jerry role Sales ekler.

CREATE ROLE Sales;

GRANT SELECT ON OBJECT::Orders TO Sales;
GRANT UPDATE ON OBJECT::Orders TO Sales;
GRANT DELETE ON OBJECT::Orders TO Sales;

ALTER ROLE Sales ADD MEMBER Jerry;

İzin sistemi hakkında daha fazla bilgi için bkz. Veritabanı Altyapısı izinlerini kullanmaya başlama.

Satır düzeyi güvenliği yapılandırın

Satır düzeyinde güvenlik, sorgu yürüten kullanıcıya göre veritabanındaki satırlara erişimi sınırlamanızı sağlar. Bu özellik, müşterilerin sadece kendi verilerine erişebilmesini veya çalışanların sadece kendi departmanlarının verilerine erişebilmesini sağlamak gibi durumlar için faydalıdır.

Aşağıdaki adımlar, farklı satır seviyesinde iki Sales.SalesOrderHeader kullanıcıyı masaya erişime sahip olarak ayarlar.

Satır düzeyinde güvenliği test etmek için iki kullanıcı hesabı oluşturun:

USE AdventureWorks2025;
GO

CREATE USER Manager WITHOUT LOGIN;
CREATE USER SalesPerson280 WITHOUT LOGIN;

Sales.SalesOrderHeader tablosunda her iki kullanıcıya da okuma erişimi verin.

GRANT SELECT ON Sales.SalesOrderHeader TO Manager;
GRANT SELECT ON Sales.SalesOrderHeader TO SalesPerson280;

Yeni bir şema ve satır içi tablo değerli fonksiyon (inline table-valued function) oluşturun. Fonksiyon, sütundaki SalesPersonID bir satır giriş SalesPerson kimliğiyle eşleştiğinde veya sorguyu çalıştıran kullanıcı kullanıcı Manager olduğunda geri 1 döner.

CREATE SCHEMA Security;
GO

CREATE FUNCTION Security.fn_securitypredicate
(@SalesPersonID INT)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
    SELECT 1 AS fn_securitypredicate_result
    WHERE ('SalesPerson' + CAST (@SalesPersonId AS VARCHAR (16)) = USER_NAME())
          OR (USER_NAME() = 'Manager')

İşlevi tabloda hem filtre hem de blok koşulu olarak ekleyerek bir güvenlik ilkesi oluşturun:

CREATE SECURITY POLICY SalesFilter
    ADD FILTER PREDICATE Security.fn_securitypredicate(SalesPersonID) ON Sales.SalesOrderHeader,
    ADD BLOCK PREDICATE Security.fn_securitypredicate(SalesPersonID) ON Sales.SalesOrderHeader
    WITH (STATE = ON);

Her kullanıcı olarak tabloyu SalesOrderHeader sorgulamak için aşağıdaki ifadeleri çalıştırın. SalesPerson280 yalnızca kendi satışlarından 95 satırı görebildiğini ve Manager'in tablodaki tüm satırları görebildiğini doğrulayın.

EXECUTE AS USER = 'SalesPerson280';

SELECT *
FROM Sales.SalesOrderHeader;

REVERT;

EXECUTE AS USER = 'Manager';

SELECT *
FROM Sales.SalesOrderHeader;

REVERT;

Güvenlik politikasını değiştirerek onu devre dışı bırakın. Artık her iki kullanıcı da tüm satırlara erişebilir.

ALTER SECURITY POLICY SalesFilter
    WITH (STATE = OFF);

Dinamik veri maskele özelliğini etkinleştirme

Dinamik veri maskeleme , belirli sütunları tamamen veya kısmen maskeleyerek hassas verilerin uygulama kullanıcılarına açık olmasını sınırlamanıza olanak tanır.

Tablodaki ALTER TABLE sütununa maskeleme işlevi eklemek için EmailAddress deyimini kullanın:

USE AdventureWorks2025;
GO

ALTER TABLE Person.EmailAddress
    ALTER COLUMN EmailAddress
        ADD MASKED WITH (FUNCTION = 'email()');

Tabloda izni olan yeni bir kullanıcı TestUserSELECT oluşturun ve ardından maskeli veriyi görüntülemek için bir sorgu TestUser yürütün:

CREATE USER TestUser WITHOUT LOGIN;

GRANT SELECT
    ON Person.EmailAddress TO TestUser;

EXECUTE AS USER = 'TestUser';

SELECT EmailAddressID,
       EmailAddress
FROM Person.EmailAddress;

REVERT;

Maskeleme işlevinin ilk kayıttaki e-posta adresini değiştirdiğini doğrulayın:

E-postaAdresiID E-posta Adresi
1 ken0@adventure-works.com

içine

E-postaAdresiID E-posta Adresi
1 kXXX@XXXX.com

Saydam veri şifrelemesini etkinleştirme

Bir saldırgan, sabit diskinizden veritabanı dosyalarını çalabilir. Bu, saldırganın sisteme erişim hakkı artırıldığında, bir çalışan dosyaları alırsa veya biri dosyaları saklayan bilgisayarı çaldığında meydana gelebilir.

Saydam veri şifrelemesi (TDE), veri dosyalarını sabit sürücüde depolandığı şekilde şifreler. master SQL Server Database Engine veritabanında şifreleme anahtarı bulunur, böylece Database Engine veriyi manipüle edebilir. Anahtara erişim olmadan veritabanı dosyaları okunamaz. Üst düzey yöneticiler anahtarı yönetebilir, yedekler yapabilir ve yeniden oluşturabilir, böylece sadece seçilmiş kişiler veritabanını taşıyabilir. TDE'yi etkinleştirdiğinizde, SQL Server veritabanını tempdb otomatik olarak şifreler.

Database Engine verileri okuyabildiği için, TDE, doğrudan belleği okuyabilir veya yönetici hesabı üzerinden SQL Server'a erişebilen bilgisayar yöneticilerinin yetkisiz erişimine karşı koruma sağlamaz.

TDE'yi yapılandırma

  • Bir ana anahtar oluştur
  • Ana anahtarla korunan bir sertifika oluşturma veya alma
  • Bir veritabanı şifreleme anahtarı oluşturun ve sertifikayla korun
  • Veritabanını şifreleme kullanacak şekilde ayarlama

TDE'yi yapılandırmak için CONTROL ve master veritabanı üzerinde izin, ayrıca CONTROL kullanıcı veritabanı üzerinde izin gereklidir. Genellikle bir yönetici TDE'yi yapılandırıyor.

Aşağıdaki örnek, sunucuda yüklenmiş bir sertifika MyServerCert ile veritabanının AdventureWorks2025 şifrelenmesini ve şifresini çözmeyi göstermektedir.

USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
GO

CREATE CERTIFICATE MyServerCert
    WITH SUBJECT = 'My Database Encryption Key Certificate';
GO

USE AdventureWorks2025;
GO

CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO

ALTER DATABASE AdventureWorks2025
    SET ENCRYPTION ON;

TDE'yi kaldırmak için aşağıdaki komutu çalıştırın:

ALTER DATABASE AdventureWorks2025
    SET ENCRYPTION OFF;

SQL Server, arka plan iş parçacıklarında şifreleme ve şifre çözme işlemlerini planlar. Bu işlemlerin durumunu katalog görünümleri ve dinamik yönetim görünümleriyle bu makalenin ilerleyen bölümlerinde görünen listede görebilirsiniz.

Warning

Veritabanı şifreleme anahtarı, TDE'nin etkinleştirilmiş olduğu veritabanlarının yedekleme dosyalarını da şifreler. Sonuç olarak, bu yedeklemeleri geri yüklerken veritabanı şifreleme anahtarını koruyan sertifikanın kullanılabilir olması gerekir. Veritabanını yedeklemenin yanı sıra, veri kaybını önlemek için sunucu sertifikalarını da yedeklemeniz gerekir. Sertifika artık mevcut değilse veri kaybı ortaya çıkar. Daha fazla bilgi için bkz. SQL Server Sertifikaları ve Asimetrik Anahtarlar.

TDE hakkında daha fazla bilgi için bkz . Saydam veri şifrelemesi (TDE).

Yedekleme şifrelemeyi yapılandırma

SQL Server, yedek oluştururken verileri şifreleyebilir. Yedekleme oluştururken şifreleme algoritmasını ve şifrelayıcıyı (sertifika veya asimetrik anahtar) belirterek şifrelenmiş bir yedekleme dosyası oluşturabilirsiniz.

Warning

Her zaman sertifikayı veya asimetrik anahtarı yedeklemek, tercihen şifrelediği yedekleme dosyasından farklı bir yere yedeklemek gerekir. Sertifika veya asimetrik anahtar olmadan yedekleme dosyasını kullanılamaz hale getirerek yedeklemeyi geri yükleyemezsiniz.

Aşağıdaki örnek bir sertifika oluşturur ve ardından sertifika tarafından korunan bir yedekleme oluşturur.

USE master;
GO

CREATE CERTIFICATE BackupEncryptCert
    WITH SUBJECT = 'Database backups';
GO

BACKUP DATABASE [AdventureWorks2025]
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2025.bak'
WITH COMPRESSION,
    ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupEncryptCert),
    STATS = 10;
GO

Daha fazla bilgi için bkz . Yedekleme şifrelemesi.