Security Resource Governor

Resource Governor wykorzystuje istniejące SQL Server mechanizmy zabezpieczeń, takich jak uwierzytelnianie, poziomy uprawnień i własności łańcuchów.W tym temacie identyfikuje aspektów Konfigurowanie i używanie Resource Governor, które należy rozważyć w celu zapewnienia, że potencjalne problemy zostały rozwiązane.

Uwagi

Następujące elementy Resource Governor projektowania i implementacji należy uznać za zapewnienie możliwie tę funkcję podczas używania go:

  • Uprawnienia

  • Pula zasobów i grupa obciążenia nazwy

  • Funkcja zdefiniowana przez użytkownika klasyfikatora

Uprawnienia

Następujące uprawnienia są wymagane ustawienia Resource Governor zmiany lub widoku:

  • Aby zmienić konfiguracja Resource Governor, użytkownika wymaga uprawnień sterowania serwera.Uprawnienia są sprawdzane podczas wykonywania żadnych innych instrukcji DDL Resource Governor.

  • Aby wyświetlić konfiguracja aktywnej dostarczone przez dynamiczne zarządzanie widokami, użytkownika wymaga uprawnień WYŚWIETL stan serwera.

Zaleca się, że zdolność do autora lub zmienić konfiguracja Resource Governor znajduje się do bazy danych doświadczonych administratorów.

Pulę zasobów i nazwy grup obciążenia

Wszystkie nazwy zasób puli i grupa obciążenia są publicznie dostępnym.Podczas tworzenia pul i grup należy wybrać nazwy, które nie ujawniać informacji o charakterze aplikacji uruchomionych na serwerze.Na przykład obciążenia grupę o nazwie CompanyPayroll zawiera jasne wskazanie charakter i poziom krytyczności aplikacje korzystające z grupa obciążenia.

Klasyfikator funkcja zdefiniowana przez użytkownika

Funkcja zdefiniowana przez użytkownika klasyfikatora (UDF) są przechowywane w wzorca bazy danych.

Ta funkcja jest podobny do logowania usługi wyzwalaczy w jego projektowanie i wdrażanie i jest uruchamiany po wyzwalaczy logowania jako część procesu logowania.Funkcja wykonuje w kontekście sesji żądanie logowania i klasyfikacji musi zakończyć się przed rzeczywiście jest ustanawiana sesja.Dlatego wszystkie komunikaty pochodzące z wewnątrz funkcja klasyfikatora, który normalnie byłoby osiągnąć użytkownika, takie jak komunikaty o błędach i komunikaty z instrukcja drukowania są kierowane do SQL Server dziennik błędów.

PrzestrogaPrzestroga

Chociaż to wydanie z Resource Governor implementuje schemabinding, ograniczyć wywołania, które mogą być wykonane z klasyfikatora UDF, wszystkie dane zwrócone przez funkcja nie jest zawsze bezpieczne.Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące pisania funkcji klasyfikatora.

Uwaga następujące aspekty klasyfikatora zachowanie funkcja zdefiniowanej przez użytkownika:

  • Resource Governor uruchamia tę funkcja jako część klasyfikacji w kontekście użytkownika logowania domyślnie lub wyznaczonych użytkowników Jeśli określono jako wykonywanie funkcja.

  • Po uruchomieniu tej funkcja w ramach klasyfikacji Resource Governor nie sprawdza uprawnienie EXECUTE klasyfikatora UDF.Jednak wszystkie obiekty odwołuje się funkcja są przedmiotem kontroli standardowe uprawnienia, które mogą umożliwić dostęp oparty na łańcuch własności.

  • Rejestrowanie funkcja jak klasyfikatora Resource Governor nie narusza jego poziomy uprawnień, jeśli użyte poza zakres Resource Governor klasyfikacji.

Własność łańcuchów Resource Governor

Można polegać na tworzenie łańcucha własności oparte na schemacie domyślne lub udzielić dostępu pojedynczego użytkownika do schematu, gdy działa Resource Governor klasyfikacji za pomocą jako EXECUTE.Poniższy przykład kodu i komentarze ilustrują, jak tworzenie łańcucha własności Resource Governor działa.

Ostrzeżenie

W poniższym przykładzie założono, że logowań SQL są włączone.

Poniższy kod tworzy schemat użytkowników (SchemaUser1, SchemaUser2) mają dostęp do 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

Poniższy kod tworzy użytkownika (NormalUser1) z domyślnymi uprawnienia logowania.

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

Poniższy kod tworzy schematy (Schema1, Schema2) i mapuje je użytkownikom schematu, które zostały utworzone.Tworzy również tabela (groupTable) dla schematów.

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

Poniższy kod dodaje wartości do groupTable.

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

W tym momencie Schema1 i Schema2 są własnością SchemaUser1 i SchemaUser2, odpowiednio.Następny przykładowy kod tworzy funkcja, która będzie używana do dostępu Schema1 i 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

Poniższy kod rejestruje funkcja poprzedniego jako klasyfikatora UDF.Należy zauważyć, że SchemaUser1 nie ma uprawnień dostępu do Schema2.

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

Jak badania próby logowania jako NormalUser1 z innego połączenia klient.Otwórz Podgląd zdarzeń systemu Windows.Powinien być widoczny wpis błąd klasyfikatora w dzienniku aplikacji.NormalUser1 dziedziczy prawa dostępu dla Schema1.groupTable przez własności łańcuch z Schema1.classifier.Jednak Schema1 nie ma uprawnień dostępu do Schema2.groupTable.

Jako inny test udzielić SELECT uprawnień do SchemaUser1 dla Schema2.groupTable.

GRANT SELECT ON Schema2.groupTable TO SchemaUser1
go

Logowanie jako NormalUser1.Ponownie zostanie wyświetlony wpis błąd klasyfikatora w zdarzenie dziennika.Ten błąd występuje, ponieważ serwer sprawdza, czy NormalUser1 ma uprawnienia SELECT nie jest dziedziczona z SchemaUser1.

W następnym przykładzie tworzony jest innej funkcja klasyfikatora.Ten czas logowania są uprawnienie do wykonywania jako 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

Ponieważ nowa funkcja działa w kontekście SchemaUser1 i SchemaUser1 ma uprawnienie SELECT na Schema2.groupTable, funkcja Schema1.classifier2() NormalUser1 podczas logowania zostanie uruchomiony pomyślnie.

Logowanie ponownie jako NormalUser1 i wyboru zdarzenie w dzienniku błąd klasyfikatora.

Ostrzeżenie

Ponieważ nie przyznano uprawnienie EXECUTE funkcja Schema1.classifier2 NormalUser1, NormalUser1 nie można uruchomić funkcja w trybie ad-hoc.

Aby uzyskać więcej informacji, zobacz Łańcuchy własności.

Testowanie funkcji klasyfikatora

Należy przetestować i zoptymalizować funkcja Klasyfikator przed użyciem go do klasyfikowania przychodzące żądania.Funkcja słabo pisemne może uszkodzić system limit czasu i ujawniania informacji o konfiguracja.Dedykowane połączenia administratora (DAC) można rozwiązywać funkcja klasyfikatora, gdy włączone jest Resource Governor, ponieważ to połączenie nie podlega klasyfikacji.Zaleca się, aby mieć DAC włączone na serwerze.Aby uzyskać więcej informacji, zobacz Za pomocą dedykowanego połączenia administracyjnego.

Ostrzeżenie

Jeśli DAC nie jest dostępna dla rozwiązywania problemów; innych opcji jest ponowne uruchomienie systemu w trybie pojedynczego użytkownika.Tryb pojedynczego użytkownika nie podlega klasyfikacji; Jednak to nie oznacza udzielenia zdolność do diagnozowania Resource Governor klasyfikatora jest uruchomiona.