Aracılığıyla paylaş


Kaynak süresine güvenlik

Kaynak süresine kullanan var SQL Server güvenlik mekanizmaları gibi kimlik doğrulaması, izin düzeyleri ve sahiplik chains.Bu konuda, yapılandırma ve olası güvenlik sorunlarını ele sağlamak için göz önünde bulundurmalısınız kaynak süresine kullanma durumlarını tanımlar.

Dikkate Alınacak Noktalar

Kaynak süresine tasarımı ve uygulaması aşağıdaki öğelerden, kullandığınızda, bu özellik olabildiğince güvenli olduğundan emin olmak için düşünülmesi gerekir:

  • İzinler

  • Kaynak havuzu ve iş yükü grubu adları

  • Kullanıcı tanımlı işlev Sınıflandırıcısı

İzinler

Aşağıdaki izinleri gerekli değişikliği veya görünümü kaynak süresine ayarlar şunlardır:

  • Kaynak süresine değiştirmek için yapılandırma, bir kullanıcı control server izni gerektirir.Herhangi bir kaynak süresine ddl deyimleri yürütüldüğünde izinleri denetlenir.

  • Etkin görüntülemek için yapılandırma sağlanan dinamik yönetimi görünümleri tarafından kullanıcı görünüm server state izni gerektirir.

Yazar veya kaynak süresine değiştirme olanağı öneririz yapılandırma deneyimli veritabanı yöneticileri için verilir.

Kaynak havuzunu ve iş yükünü grup adları

Tüm kaynak havuzu ve iş yükü grubu genel bakan adlarıdır.Havuzları ve grupları oluştururken, sunucu üzerinde çalışan uygulamaları doğası hakkında bilgiyi açığa çıkarabilir adları seçmelisiniz.Örneğin, bir iş yükü grubu adlı CompanyPayroll sağlayan yapısı belirgin bir gösterge ve criticality kullanan uygulamalar, iş yükü grubu.

Kullanıcı tanımlı işlev Sınıflandırıcısı

Sınıflandırıcısı kullanıcı tanımlı işlev (udf) depolanan ana veritabanı.

Bu işlev, tasarım ve uygulaması içinde oturum açma tetikleyici benzer ve sonra oturum açma tetikleyici oturum açma işleminin bir parçası çalışır.işlev Oturum yapma isteği ve sınıflandırma gerekir son oturumu gerçekten oluşturulmadan önce oturumu bağlamında yürütülür.Bu nedenle, tüm iletiler normalde hata iletileri ve baskı gelen iletileri gibi kullanıcı kaynaklandığından Sınıflandırıcısı işlev içinde kaynaklanan deyim, için yolu saptırabilir SQL Server hata Kütük'ü

Dikkat notuDikkat

Bu sürüm, kaynak süresine dan içinde udf, Sınıflandırıcısı işlev tarafından döndürülen tüm veriler yapılabilir aramaları kısıtlamak için ema balama uygulayan mutlaka güvenli değildir.Daha fazla bilgi için bkz: Sınıflandırıcısı işlevi yazarken dikkat edilmesi gereken noktalar.

Kullanıcı tanımlı Sınıflandırıcısı aşağıdaki yönlerini unutmayın işlev davranış:

  • execute as işlevinde belirtilen kaynak süresine bu işlev varsayılan olarak oturum açma kullanıcı bağlamında sınıflandırılması bir parçası olarak veya atanmış kullanıcı olarak çalıştırılır.

  • Kaynak süresine sınıflandırma bir parçası olarak bu işlev çalıştırıldığında, udf Sınıflandırıcısı üzerinde execute izni denetlemez.Ancak, işlev tarafından başvurulan tüm nesneleri temel alan erişim verebilir standart izinleri denetimleri için konu olan sahiplik zinciri.

  • Bir işlev olarak bir kaynak süresine kayıt kapsam dışında kaynak süresine sınıflandırma kullandıysanız Sınıflandırıcısı, izin düzeyleri etkilemez.

Sahiplik Chains içinde kaynak süresine

Varsayılan şema tabanlı sahiplik zincirlemeyi üzerinde dayanan veya execute as kaynak süresine sınıflandırma çalışırken, bir şema için bir tek kullanıcı erişimi vermek için kullanın.Aşağıdaki kod örneği ve açıklamalar sahiplik zincirleme kaynak süresine de nasıl çalıştığı gösterilmektedir.

Not

Aşağıdaki örnek sql oturumu etkin olduğunu varsayar.

Aşağıdaki kod şema kullanıcılar oluşturur (SchemaUser1, SchemaUser2) için erişim iznine sahip master.

use master
go

CREATE LOGIN SchemaUser1 WITH PASSWORD='your password here';
CREATE USER SchemaUser1 FOR LOGIN [SchemaUser1];
CREATE LOGIN SchemaUser2 WITH PASSWORD='your password here';
CREATE USER SchemaUser2 FOR LOGIN [SchemaUser2];
go

Aşağıdaki kod (NormalUser1) kullanıcı oturum açma izinleri varsayılan olarak oluşturur.

CREATE LOGIN NormalUser1 WITH PASSWORD='your password here';
CREATE USER NormalUser1 FOR LOGIN [NormalUser1];
go

Aşağıdaki kod, şemalar oluşturur (Schema1, Schema2) ve onları oluşturulan şema kullanıcıların eşler.Ayrıca bir tablo oluşturur (groupTable) şemalar.

CREATE SCHEMA Schema1 AUTHORIZATION SchemaUser1
CREATE TABLE groupTable (uname sysname, gname sysname);
CREATE SCHEMA Schema2 AUTHORIZATION SchemaUser2
CREATE TABLE groupTable (uname sysname, gname sysname);
go

Aşağıdaki kod değerlerini ekler groupTable.

INSERT Schema1.groupTable VALUES(N'NormalUser1',N'Group1');
INSERT Schema2.groupTable VALUES(N'NormalUser1',N'Group2');
go

Bu noktada, Schema1 ve Schema2 SchemaUser1 ve SchemaUser2, sırasıyla sahibi.Sonraki kod örneği kullanılacak bir işlev oluşturur erişmek için Schema1 ve Schema2.

CREATE FUNCTION Schema1.classifier() RETURNS sysname WITH SCHEMABINDING AS
BEGIN
      DECLARE @n sysname
      SELECT @n = gname FROM Schema1.groupTable WHERE uname = SUSER_NAME()
      SELECT @n = gname FROM Schema2.groupTable WHERE uname = SUSER_NAME()
      RETURN @n
END
go

Aşağıdaki kod önceki işlev Sınıflandırıcısı udf kaydeder.SchemaUser1 için erişim iznine sahip olmaması dikkat Schema2.

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION=Schema1.classifier);
ALTER RESOURCE GOVERNOR RECONFIGURE
go

Sınama olarak, başka bir istemci bağlantısından NormalUser1 oturum çalışın.Windows Olay Görüntüleyicisi'ni açın.Sınıflandırıcısı hata giriş uygulama günlüğüne görmeniz gerekir.NormalUser1 Schema1.classifier zincirleme sahipliği tarafından Schema1.groupTable için erişim haklarını devralır.Ancak, Schema1 Schema2.groupTable erişim iznine sahip değil.

Başka bir test vermek SELECT izin SchemaUser1 için Schema2.groupTable.

GRANT SELECT ON Schema2.groupTable TO SchemaUser1
go

Olarak NormalUser1 oturum açın.Bir kez daha Sınıflandırıcısı hatası girdi olay günlüğüne göreceksiniz.Sunucu NormalUser1 SchemaUser1 devralınan select izni sahip olup olmadığını görmek için denetler, çünkü bu başarısızlık nedeniyle oluşur.

Sonraki kod örneğinde, başka bir Sınıflandırıcısı işlev oluşturulur.Bu saat oturumu açma izni verilen execute as SchemaUser1.

CREATE FUNCTION Schema1.classifier2() RETURNS sysname WITH SCHEMABINDING, EXECUTE AS 'SchemaUser1' AS
BEGIN
      DECLARE @n sysname
      SELECT @n = gname FROM Schema1.groupTable WHERE uname = SUSER_NAME()
      SELECT @n = gname FROM Schema2.groupTable WHERE uname = SUSER_NAME()
      RETURN @n
END
go

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION=Schema1.classifier2);
ALTER RESOURCE GOVERNOR RECONFIGURE;
go

Yeni işlev SchemaUser1 içeriğinde çalışır ve SchemaUser1 Schema2.groupTable üzerinde select iznine sahip olduğundan, Schema1.classifier2() işlevini başarıyla NormalUser1 oturum açma için çalıştırın.

Oturum yeniden olarak NormalUser1 ve Sınıflandırıcısı hata için olay günlüğünü denetleyin.

Not

NormalUser1 NormalUser1 Schema1.classifier2 işlevi üzerinde execute izni verilmiş olduğundan, işlev bir anlık sorgu olarak çalışamaz.

Daha fazla bilgi için bkz: Sahiplik Chains.

Sınıflandırıcısı işlevi sınama

Test ve gelen istekleri sınıflandırmak için kullanmadan önce sizin Sınıflandırıcısı işlev en iyi duruma getirme.Kötü yazılmış bir işlev sistem zaman aşımına uğramış ve yapılandırma bilgileri açıklamanızı gelmesine.Adanmış yönetici bağlantısı (dac), bu bağlantı sınıflandırmaya tabi olmadığı için kaynak süresine etkinken Sınıflandırıcısı işlev sorunlarını gidermek için kullanabilirsiniz.dac sunucuda etkinleştirilmiş olması önerilir.Daha fazla bilgi için bkz: Adanmış yönetici bağlantısı kullanma.

Not

Bir dac sorun giderme için kullanılabilir değilse; diğer tek kullanıcı modunda sistemi yeniden başlatmanız seçeneğidir.Tek kullanıcı modu sınıflandırmaya tabi değildir; Ancak bunu size çalışır durumdayken kaynak süresine Sınıflandırıcısı tanımak olanağı vermez.