Share via


Kaynak Governor güvenlik

Varolan kaynak Governor kullanır. SQL Server kimlik doğrulaması ve izin düzeylerini sahipliği zincirlerini gibi güvenlik mekanizmaları. Bu konu, yapılandırma ve olası güvenlik sorunlarını adreslenir emin olmak için düşünmelisiniz, kaynak Governor kullanarak durumlarını tanımlar.

Dikkate Alınacak Noktalar

Aşağıdaki öğeleri içeren kaynak Governor tasarımı ve uygulaması kullandığınızda, bu özellik mümkün olan en güvenli olduğundan emin olmak için düşünülmesi gerekir:

  • İzinler

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

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

İzinler

Aşağıdaki izinlerden gerekli değiştirme veya görüntüleme kaynak Governor ayarlarıdır:

  • Kaynak Governor değiştirmek için yapılandırma, bir kullanıcı, DENETIM SERVER iznine gerek duyar.Izinler, herhangi bir kaynak Governor DDL) deyimleri yürütüldüğünde denetlenir.

  • Etkin görüntülemeye yapılandırma sağlanan, dinamik yönetimi görünümleri tarafından bir kullanıcı, VIEW SERVER DURUM izni gerektirir.

Yazar veya kaynak Governor yapılandırmasını değiştirme yeteneğini deneyimli veritabanı yöneticilere verilir öneririz.

Kaynak havuzu ve Workload grup adları

Tüm kaynak havuzunu ve iş yükü grubu ortak bakan adlardır.Havuzlar ve grupları oluştururken, sunucuda çalışan uygulamaların yapısı hakkında bilgi açığa adları seçmelisiniz.Örneğin, belli bir gösterge yapısı ve iş yükü grubu kullanan uygulamaların criticality CompanyPayroll adlı bir iş yükü grubu sağlar.

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

Kullanıcı tanımlı Sınıflandırıcısı işlev (UDF) saklanır Yönetici veritabanıdır.

Bu işlev, LOGON Tetikleyicileri, tasarımı ve uygulaması içinde benzer ve sonra LOGON Tetikleyicileri oturum açma işleminin bir parçası çalışır.Işlev bir istekte oturum oturum bağlamında çalıştırılır ve sınıflandırması oturum gerçekten oluşturulmadan önce bitmesi gereken.Normal olarak, hata iletileri ve PRINT ekstresi, gelen iletileri gibi kullanıcı ulaşma Sınıflandırıcısı işlev içinde kaynaklanan tüm iletiler için bu nedenle diverted SQL Server hata günlüğü.

Uyarı

Bu sürümdeki, kaynak Governor yapılabilecek gelen Sınıflandırıcısı UDF, tüm verileri işlev tarafından döndürülen aramaları kısıtlamak için schemabinding uygulayan olması güvenli değildir.Daha fazla bilgi için bkz:Bir Sınıflandırıcısı işlev yazılıyor dikkat edilmesi gereken noktalar.

Kullanıcı tanımlı fonksiyonun davranışı Sınıflandırıcısı bir aşağıdaki yönlerini dikkat edin:

  • Kaynak Governor yürütmek AS işlev belirtilmişse, bu işlev varsayılan oturum açma kullanıcı bağlamında sınıflandırmasını bir parçası olarak veya atanmış kullanıcı olarak çalışır.

  • Kaynak Governor sınıflandırmasını bir parçası olarak, bu işlev çalıştığında, UDF Sınıflandırıcısı üzerinde yürütmek izni denetlemez.Ancak, işlev tarafından başvurulan tüm nesneleri üzerinde sahiplik zinciri temel alan erişim sağlayan standart izinleri çekleri konu üzeresiniz.

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

Sahiplik chains, kaynak Governor

Varsayılan şema tabanlı sahipliği zincirleme üzerinde kullanır veya kaynak Governor sınıflandırma çalışırken, bir şema için bir tek kullanıcı erişimi vermek yürütmek AS'ni kullanabilirsiniz.Aşağıdaki örnek kod ve açıklama, kaynak Governor sahipliği zincirleme nasıl çalıştığı gösterilmektedir.

Not

Aşağıdaki örnek SQL oturumların etkin olduğunu varsayar.

Aşağıdaki kod (şema) kullanıcıların oluşturur.SchemaUser1, SchemaUser2), erişimi 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, varsayılan oturum açma izinleri bir kullanıcı (NormalUser1) 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 bunları, şema kullanıcılar için oluşturulan eşler. () Bir tablo oluşturur...groupTable) için ş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ğerine 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 ait. Sonraki kod örneği, kullanılacak olan işlev oluşturur erişimi 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 kaydettirir işlev bir UDF Sınıflandırıcısı olarak.SchemaUser1 erişim iznine sahip olmadığını unutmayın. Schema2.

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

Sınama olarak, başka bir istemci bağlantısını NormalUser1 oturum açmaya çalışın.Windows Olay görüntüleyiciyi açın.Uygulama günlüğüne Sınıflandırıcısı başarısızlık girdisinde görmelisiniz.NormalUser1 sahipliği Schema1.classifier zincirleme olarak Schema1.groupTable için erişim haklarını devralır.Ancak, Schema1 Schema2.groupTable erişim iznine sahip değil.

Başka bir sınama olarak verin. SELECT izni SchemaUser1 için Schema2.groupTable. 

GRANT SELECT ON Schema2.groupTable TO SchemaUser1
go

NormalUser1 olarak oturum açın.Yeniden Sınıflandırıcısı başarısızlık girdisinde olay günlüğüne bir randevu olduðunu görecektir.Sunucu NormalUser1 SchemaUser1 ' devralınmış SELECT iznine sahip olup olmadığını görmek için denetler, çünkü bu hataya neden olur.

Sonraki kod örneğinde, baþka bir Sınıflandırıcısı iþlev oluşturulur.yürütmek AS şu oturum açma izni verilir 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 bağlamında çalıştırılır ve SchemaUser1 üzerinde Schema2.groupTable SELECT izni olduğundan, Schema1.classifier2() işlevi başarıyla NormalUser1 oturum açma için çalıştırın.

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

Not

NormalUser1 Schema1.classifier2 işlev üzerinde yürütmek izni verilmiş olduğundan NormalUser1 işlevi ilgili güvenlik açıklarına karşı gibi bir anlık sorgu çalıştırılamıyor.

Daha fazla bilgi için bkz:Sahiplik chains.

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

Sınama ve gelen istekleri sınıflandırmak için kullanmadan önce sizin Sınıflandırıcısı işlev en iyi duruma getirme gerekir.Hatalı yazılan BIR işlev sistem zaman aşımına uğramış ve yapılandırma bilgileri açıklamanızı kullanılamamasına.Bu bağlantı, konu sınıflandırmasını olmadığı için kaynak Governor etkinken Sınıflandırıcısı işlev sorunlarını gidermek için özel yönetici bağlantısı (DAC) kullanabilirsiniz.Sunucuda etkin DAC sahip olmasını öneririz.Daha fazla bilgi için bkz:Bir özel yönetici bağlantısı kullanma.

Not

Bir DAC sorun giderme; yoksa diğer tek kullanıcı modunda sistemi yeniden başlatmanız seçeneğidir.Tek kullanıcı modunda sınıflandırma tabi değildir; ancak bunu size çalışırken kaynak Governor Sınıflandırıcısı tanılamanıza olanak vermez.