Aracılığıyla paylaş


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. Bunlar Linux'a özgü veya benzersiz değildir, ancak size daha fazla araştırma yapmanız gereken alanlar hakkında fikir vermenize yardımcı olur. Her örnekte, bu alanın ayrıntılı belgelerine bir bağlantı sağlanır.

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

master CREATE LOGIN deyimini kullanarak bir oturum açma oluşturup başkalarına SQL Server erişimi tanıyın. Örneğin:

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

Dikkat

Parolanız,SQL Server varsayılan parola ilkesine uygun olmalıdır. 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 özeldir ve bunlara erişim vermek için her veritabanında ayrı olarak oluşturulmalıdır. Aşağıdaki örnek sizi AdventureWorks2025 veritabanına taşır ve ardından CREATE USER deyimini kullanarak adlı oturum açma Larrybilgileriyle ilişkilendirilmiş Larry adlı bir kullanıcı oluşturur. Oturum açma bilgileri ve kullanıcı birbiriyle ilişkili (birbiriyle eşlenmiş) olsa da, bunlar farklı nesnelerdir. Oturum açma, sunucu düzeyinde bir ilkedir. Kullanıcı, veritabanı düzeyinde bir sorumludur.

USE AdventureWorks2022;
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 kullanıcı bir veritabanı oluşturduğunda, bu veritabanına bağlanabilen veritabanı sahibi olur. 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 AdventureWorks2022;
GO

GRANT ALTER ANY USER TO Jerry;
GO

Artık Larry daha fazla oturum açma kaydı oluşturabilir ve kullanıcı Jerry daha fazla kullanıcı yaratabilir.

En az ayrıcalıkla erişim verme

Kullanıcı veritabanına ilk bağlanan kişiler yönetici ve veritabanı sahibi hesaplarıdır. Ancak bu kullanıcılar veritabanındaki tüm izinlere sahiptir. Bu, çoğu kullanıcının sahip olması gerekenden daha fazla izindir.

Yeni başlarken, yerleşik sabit veritabanı rollerini kullanarak bazı genel izin kategorileri atayabilirsiniz. Örneğin, db_datareader sabit veritabanı rolü veritabanındaki tüm tabloları okuyabilir, ancak değişiklik yapmaz. ALTER ROLE deyimini kullanarak sabit veritabanı rolünde üyelik verme. Aşağıdaki örnek kullanıcıyı Jerrydb_datareader sabit veritabanı rolüne ekler.

USE AdventureWorks2022;
GO

ALTER ROLE db_datareader ADD MEMBER Jerry;

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

Daha sonra verilerinize daha kesin erişim yapılandırmaya hazır olduğunuzda (kesinlikle önerilir), CREATE ROLE deyimini kullanarak 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 ifadeler, Sales adlı bir veritabanı rolü oluşturur, Sales grubuna Orders tablosundaki satırları görme, güncelleme ve silme yetkisi verir ve ardından Jerry kullanıcısını Sales rolüne ekler.

CREATE ROLE Sales;

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

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ırma

Satır düzeyi güvenlik , sorguyu yürüten kullanıcıya göre veritabanındaki satırlara erişimi kısıtlamanızı sağlar. Bu özellik, müşterilerin yalnızca kendi verilerine erişebilmesini veya çalışanların yalnızca departmanlarıyla ilgili verilere erişebilmesini sağlama gibi senaryolar için kullanışlıdır.

Aşağıdaki adımlarda, Sales.SalesOrderHeader tablosuna farklı satır düzeyinde erişimi olan iki kullanıcıyı ayarlama süreci açıklanmaktadır.

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

USE AdventureWorks2022;
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. Sütundaki SalesPersonID bir satır oturum açma kimliğiyle SalesPerson eşleştiğinde veya sorguyu yürüten kullanıcı Yönetici kullanıcısıysa işlev 1 döndürür.

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);

Aşağıdakileri her bir kullanıcı ile SalesOrderHeader tablosunu sorgulatmak için yürütü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;

İlkeyi devre dışı bırakmak için güvenlik ilkesini değiştirin. 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 AdventureWorks2022;
GO

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

Tablo üzerinde TestUser izni olan yeni bir kullanıcı SELECT oluşturun. Ardından, maskelenmiş verileri görüntülemek için sorguyu TestUser olarak çalıştırı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

Veritabanınıza yönelik bir tehdit, birinin sabit sürücünüzden veritabanı dosyalarını çalma riskidir. Bu durum, bir sorunlu çalışanın eylemleri aracılığıyla veya dosyaları (dizüstü bilgisayar gibi) içeren bilgisayarın çalınması yoluyla sisteminize yükseltilmiş erişim elde eden bir yetkisiz erişimle gerçekleşebilir.

Saydam veri şifrelemesi (TDE), veri dosyalarını sabit sürücüde depolandığı şekilde şifreler. master SQL Server veritabanı altyapısının veritabanı şifreleme anahtarına sahiptir, böylece veritabanı altyapısı verileri işleyebilir. Anahtara erişim olmadan veritabanı dosyaları okunamaz. Üst düzey yöneticiler anahtarı yönetebilir, yedekleyebilir ve yeniden oluşturabilir, böylece veritabanı yalnızca seçili kişiler tarafından taşınabilir. TDE yapılandırıldığında veritabanı tempdb da otomatik olarak şifrelenir.

Veritabanı Altyapısı verileri okuyabildiğinden, TDE doğrudan bellek okuyabilen veya sql Server'a yönetici hesabı üzerinden erişebilen bilgisayarın yöneticileri tarafından yetkisiz erişime karşı koruma yapmaz.

TDE'yi yapılandırma

  • Bir asıl oluşturma
  • Ana anahtarla korunan bir sertifika oluşturma veya alma
  • Veritabanı şifreleme anahtarı oluşturma ve sertifika tarafından koruma
  • 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, adlı AdventureWorks2025sunucuda yüklü bir sertifika kullanarak veritabanını şifrelemeyi MyServerCert ve şifresini çözmeyi gösterir.

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 AdventureWorks2022;
GO

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

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION ON;

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

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION OFF;

Şifreleme ve şifre çözme işlemleri SQL Server tarafından arka plan iş parçacıklarında zamanlanır. Bu makalenin devamında görüntülenen listede katalog görünümlerini ve dinamik yönetim görünümlerini kullanarak bu işlemlerin durumunu görüntüleyebilirsiniz.

Uyarı

TDE etkinleştirilmiş veritabanlarının yedekleme dosyaları da veritabanı şifreleme anahtarı kullanılarak şifrelenir. Sonuç olarak, bu yedeklemeleri geri yüklerken veritabanı şifreleme anahtarını koruyan sertifikanın kullanılabilir olması gerekir. Bu, veritabanını yedeklemeye ek olarak, veri kaybını önlemek için sunucu sertifikalarının yedeklerini koruduğundan emin olduğunuz anlamına gelir. Sertifika artık kullanılamıyorsa veri kaybına neden olur. 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, yedekleme oluştururken verileri şifreleme özelliğine sahiptir. Yedekleme oluştururken şifreleme algoritmasını ve şifrelayıcıyı (sertifika veya asimetrik anahtar) belirterek şifrelenmiş bir yedekleme dosyası oluşturabilirsiniz.

Uyarı

Sertifikayı veya asimetrik anahtarı her zaman yedekleyin ve tercihen şifrelemek için kullanılan yedekleme dosyasından farklı bir konuma yedekleyin. 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 [AdventureWorks2022]
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2022.bak'
WITH COMPRESSION,
    ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupEncryptCert),
    STATS = 10;
GO

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

  • SQL Server Veritabanı Altyapısı ve Azure SQL Veritabanı Güvenliği