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:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu makalede, SQL Server'ın bir sorumlusun güvenli hale getirilebilir öğelere erişme izinlerini doğrulamak için güvenlik önbelleğini nasıl kullandığı açıklanmaktadır.
Amaç
Veritabanı Altyapısı, güvenli hale getirilebilirler olarak bilinen ve izinlerle güvenli hale getirilebilen hiyerarşik varlık koleksiyonunu düzenler. En önemli güvenli hale getirilebilir öğeler sunucular ve veritabanlarıdır, ancak izinler daha ince bir düzeyde de ayarlanabilir. SQL Server, sorumluların güvenli hale getirilebilir öğeler üzerindeki eylemlerini, uygun izinlere sahip olduklarından emin olarak denetler.
Aşağıdaki diyagramda, Alice adlı kullanıcının sunucu düzeyinde bir oturum açma bilgisi olduğu ve her farklı veritabanında aynı oturum açma bilgilerine eşlenmiş üç farklı kullanıcının olduğu gösterilmektedir.
SQL Server, kimlik doğrulama işlemini iyileştirmek için bir güvenlik önbelleği kullanır.
Önbellek iş akışı yok
Güvenlik önbelleği geçersiz olduğunda, SQL Server izinleri doğrulamak için önbellek yok iş akışını izler. Bu bölümde önbellek yok iş akışı açıklanmaktadır.
Göstermek için aşağıdaki sorguyu göz önünde bulundurun:
SELECT t1.Column1,
t2.Column1
FROM Schema1.Table1 AS t1
INNER JOIN Schema2.Table2 AS t2
ON t1.Column1 = t2.Column2;
Güvenlik önbelleği geçersiz olduğunda, hizmet sorguyu çözümlemeden önce aşağıdaki iş akışında açıklanan adımları tamamlar.
SQL Server için güvenlik önbelleği olmayan görevler şunlardır:
- Örneğe bağlanın.
- Oturum açma doğrulaması gerçekleştirin.
- Güvenlik bağlamı belirtecini ve oturum açma belirtecini oluşturun. Bu belirteçlerin ayrıntıları sonraki bölümde açıklanmıştır.
- Veritabanına bağlanın.
- Veritabanının içinde bir veritabanı kullanıcı belirteci oluşturun.
- Veritabanı rollerinin üyeliğini denetleyin. Örneğin, db_datareader, db_datawriter veya db_owner.
- Tüm sütunlardaki kullanıcı izinlerini doğrulayın, örneğin
t1.Column1vet2.Column1üzerindeki kullanıcının izinlerini kontrol edin. -
table1vetable2gibi tüm tablolarda kullanıcı izinlerini veSchema1ileSchema2üzerinde şema izinlerini denetler. - Veritabanı izinlerini doğrular.
SQL Server, kullanıcının ait olduğu her rol için işlemi yineler. Tüm izinler alındıktan sonra sunucu, kullanıcının zincirde tek bir reddetme değil, tüm gerekli izinlere sahip olduğundan emin olmak için bir denetim gerçekleştirir. İzin denetimi tamamlandıktan sonra sorgu yürütmesi başlar.
Daha fazla bilgi için İzin denetimi algoritmasının özeti'ni gözden geçirin.
Doğrulamayı basitleştirmek için SQL Server bir güvenlik önbelleği kullanır.
Güvenlik önbelleği tanımı
Güvenlik önbelleği, bir kullanıcının izinlerini veya veritabanında veya sunucudaki çeşitli güvenli hale getirilebilir nesneler için oturum açma bilgilerini depolar. Avantajlardan biri, sorgu yürütmeyi hızlandırmasıdır. SQL Server bir sorguyu yürütmeden önce, kullanıcının şema düzeyi izinleri, tablo düzeyi izinleri ve sütun izinleri gibi farklı veritabanı güvenliği sağlanabilirleri için gerekli izinlere sahip olup olmadığını denetler.
Güvenlik önbelleği nesneleri
Önceki bölümde açıklanan iş akışını daha hızlı hale getirmek için SQL Server, güvenlik önbellekleri içinde birçok farklı nesneyi önbelleğe alır. Önbelleğe alınan nesnelerden bazıları şunlardır:
| Jeton | Açıklama |
|---|---|
SecContextToken |
Bir sorumlunun sunucu genelindeki güvenlik bağlamı bu yapı içinde tutulur. Kullanıcı belirteçlerinin bir karma tablosunu içerir ve tüm diğer önbellekler için bir başlangıç noktası veya temel işlevi görür. Oturum açma belirtecine, kullanıcı belirtecine, denetim önbelleğine ve TokenPerm önbelleğine başvurular içerir. Ayrıca, sunucu düzeyinde bir oturum açma için temel belirteç olarak davranır. |
LoginToken |
Güvenlik bağlamı belirtecine benzer. Sunucu düzeyi sorumlularının ayrıntılarını içerir. Oturum açma belirteci SID, oturum açma kimliği, oturum açma türü, oturum açma adı, isDisabled durumu ve sunucu sabit rol üyeliği gibi çeşitli öğeleri içerir. Ayrıca, sunucu düzeyinde sysadmin ve güvenlik yöneticisi gibi özel rolleri kapsar. |
UserToken |
Bu yapı, veritabanı düzeyindeki sorumlularla ilgilidir. Kullanıcı adı, veritabanı rolleri, SID, varsayılan dil, varsayılan şema, kimlik, roller ve ad gibi ayrıntıları içerir. Oturum açma için veritabanı başına bir kullanıcı belirteci vardır. |
TokenPerm |
UserToken veya SecContextToken için güvenliği sağlanabilir nesnenin tüm izinlerini kaydeder. |
TokenAudit |
Anahtar, güvenliği sağlanabilir bir nesnenin sınıfı ve kimliğidir. Girdi, bir nesnedeki her denetlenebilir işlem için denetim kimliklerini içeren bir dizi listedir. Sunucu denetimi izin denetimlerini temel alır ve belirli bir kullanıcının belirli bir nesne üzerinde sahip olduğu her denetlenebilir işlemi ayrıntılı olarak açıklar. |
TokenAccessResult |
Bu önbellek, sorgu planı başına bir girişle tek tek sorgular için sorgu izni denetimi sonuçlarını depolar. Sorgu yürütme sırasında denetlenen ilk şey olduğundan en önemli ve yaygın olarak kullanılan önbellektir. Geçici sorguların önbelleği doldurmasını önlemek için yalnızca sorgu üç kez yürütülürse sorgu izin denetimi sonuçlarını depolar. |
ObjectPerm |
Bu, veritabanındaki tüm kullanıcılar için veritabanındaki bir nesnenin tüm izinlerini kaydeder. TokenPerm ile ObjectPerm arasındaki fark, TokenPerm'in belirli bir kullanıcıya, ObjectPerm ise veritabanındaki tüm kullanıcılara yönelik olmasıdır. |
Güvenlik önbelleği depoları
Belirteçler farklı önbellek depolarında depolanır.
| Mağaza | Açıklama |
|---|---|
TokenAndPermUserStore |
Aşağıdaki nesnelerin tümünü içeren bir büyük depo: - SecContextToken- LoginToken- UserToken- TokenPerm- TokenAudit |
SecCtxtACRUserStore |
Erişim denetimi sonucu (ACR) deposu. Her oturum açma için ayrı bir güvenlik bağlamı kullanıcı deposu vardır. |
ACRUserStore |
Erişim denetimi sonuç deposu<unique id> - <db id>- <user id>Her kullanıcının tek tek ACR kullanıcı deposu vardır. Örneğin, iki farklı veritabanında beş kullanıcıyla yapılan iki oturum açma işlemi iki SecCtxtACRUserStore ve 10 farklı ACRUserStoreoluşur. |
ObjectPerm |
Veritabanı ObjPerm belirteçleri başına bir tane. Veritabanı içindeki tüm farklı güvenli hale getirilebilir öğeler. |
Bilinen sorunlar
Bu bölümde güvenlik önbelleğiyle ilgili sorunlar açıklanmaktadır.
Güvenlik önbelleği geçersizleştirmeleri
Çeşitli senaryolar, veritabanı veya sunucu düzeyinde güvenlik önbelleği geçersizleştirmelerini tetikleyebilir. Bir geçersizleştirme gerçekleştiğinde, tüm geçerli önbellek girdileri geçersiz kılınır. Gelecekteki tüm sorgular ve izin denetimleri, önbellekler yeniden doldurulana kadar tam "Önbellek yok" iş akışını izler. Tüm etkin bağlantıların önbelleğe alınan girdileri yeniden oluşturması gerektiğinden, özellikle yüksek yük altında geçersiz kılınması sunucu performansını önemli ölçüde etkileyebilir. Yinelenen önbellek geçersizleştirmeleri bu etkiyi daha da kötüleştirebilir. Veritabanındaki master geçersizleştirmeler sunucu genelinde geçersizleştirmeler olarak değerlendirilir ve örnekteki tüm veritabanlarındaki önbellekleri etkiler.
SQL Server 2025, önbellekleri yalnızca belirli bir oturum açma için geçersiz kılması özelliğini tanıtır. Bu, güvenlik önbelleği girdileri geçersiz kılındığında yalnızca etkilenen oturum açma bilgilerine ait girişlerin etkileneceği anlamına gelir. Örneğin, oturum açma L1'e yeni bir izin verirseniz, L2 oturum açma belirteçleri etkilenmez.
İlk adım olarak, bu özellik CREATE, ALTER ve DROP oturum açma senaryoları ve tek tek oturum açma işlemleri için izin değişiklikleri için geçerlidir. Grup oturum açma işlemleri sunucu düzeyinde geçersizleştirmeyle karşılaşmaya devam eder.
Aşağıdaki tabloda, güvenlik önbelleğini geçersiz kılan tüm güvenlik Veri Tanımı Dili (DDL) eylemleri listelenmiştir.
| Eylem | Konu | Kapsam |
|---|---|---|
CREATE/ALTER/DROP |
APPLICATION ROLESYMMETRIC KEYASYMMETRIC KEYAUTHORIZATIONCERTIFICATEROLESCHEMAUSER |
Belirtilen veritabanı |
DROP |
sys.all_objects veya veritabanında veya şema kapsamlı güvenli hale getirilebilir listesinde listelenen herhangi bir güvenli hale getirilebilir nesne. | Belirtilen veritabanı |
GRANT/DENY/REVOKE |
Herhangi bir veritabanı veya şema içinde yer alan güvenli hale getirilebilecek izin. | Belirtilen veritabanı |
CREATE/ALTER/DROP |
LOGIN( SERVICE) MASTER KEY |
SQL Server örneği |
ALTER |
DATABASE |
Belirtilen veritabanı |
TokenAndPermUserStore boyutu arttığında sorgu performansı
Yüksek CPU kullanımı ve artan bellek tüketimi gibi performans sorunları, TokenAndPermUserStore önbelleğindeki aşırı girdilerden kaynaklanabilir. Varsayılan olarak, SQL Server yalnızca iç bellek baskısı algıladığında bu önbellekteki girdileri temizler. Ancak, ram bol olan sunucularda, iç bellek baskısı sık sık gerçekleşmeyebilir. Önbellek büyüdükçe, yeniden kullanmak için mevcut girdileri aramak için gereken süre artar. Bu önbellek bir spinlock tarafından yönetilir ve aynı anda yalnızca bir iş parçacığının arama gerçekleştirmesine olanak sağlar. Sonuç olarak, bu davranış sorgu performansının düşmesine ve daha yüksek CPU kullanımına neden olabilir.
Geçici çözüm
SQL Server, TokenAndPermUserStore önbelleği için kota ayarlamak için kullanılabilecek iki izleme bayrağı (TF) sağlar. Varsayılan olarak kota yoktur; bu da önbelleğin sınırsız sayıda girdi barındırabileceği anlamına gelir.
- TF 4618: TokenAndPermUserStore içindeki girdi sayısını 1024 ile sınırlar.
- TF 4618 ve TF 4610: TokenAndPermUserStore içindeki girdi sayısını 8192 ile sınırlar. TF 4618'in düşük giriş sayısı sınırı diğer performans sorunlarına neden oluyorsa, 4610 ve 4618 izleme bayraklarının birlikte kullanılması önerilir. Daha fazla bilgi için bkz. DBCC TRACEON ile izleme bayrakları ayarlama.
Daha fazla bilgi için TokenAndPermUserStore önbelleğindeki aşırı girdilerden kaynaklanan performans sorunları olabilir - SQL Server makalesine başvurabilirsiniz
En iyi yöntemler
Bu bölümde güvenlik iş akışını iyileştirmeye yönelik en iyi yöntemler listelenir.
Yoğun olmayan saatlerde kullanıcı yönetimi
Güvenlik önbelleklerinin (veritabanı/sunucu düzeyi) üst düzey geçersizliği göz önünde bulundurulduğunda, sunucu yükünün düşük olduğu iş dışı saatlerde güvenlik DLL'leri gerçekleştirin. Ağır iş yükleri sırasında bir güvenlik önbelleği geçersizliği oluşursa, güvenlik önbellekleri yeniden doldurulurken sunucunun tamamında gözle görülür bir performans etkisi olabilir.
İzin değişiklikleri için tek işlemleri kullanma
Aynı işlem içinde birden çok güvenlik Veri Tanımı Dili (DDL) işlemi gerçekleştirmek, diğer etkin bağlantılarda kilitlenmelerle karşılaşma olasılığını önemli ölçüde artırabilir Bu riski azaltmak için, tek bir işlemde birden çok güvenlik DLL'sinin yürütülmesini önlemeniz önerilir. Bunun yerine, kilit çekişmelerini en aza indirmek için güvenlikle ilgili DDL işlemlerini ayrı işlemlerde yürütebilirsiniz.