Resource Governor Security
Zasób Governor korzysta z istniejących SQL Server mechanizmy zabezpieczeń, takich jak uwierzytelnianie, poziomy uprawnień i własności łańcuchy. W tym temacie identyfikuje aspektów Konfigurowanie i korzystanie z narzędzia zasób Governor, które należy wziąć pod uwagę do zapewnienia, że potencjalne problemy dotyczące zabezpieczeń są adresowane.
Uwagi
Następujące elementy zasób Governor zaprojektowanie i konieczne jest uważane za upewnij się, że dana funkcja jest tak samo bezpieczny, jak to możliwe, gdy jest używany:
Uprawnienia
Pula zasób i grupa obciążenia nazw
funkcja zdefiniowanej przez użytkownika klasyfikatora
Uprawnienia
Następujące uprawnienia są wymagane zmiany lub widoku zasób Governor ustawienia:
Aby zmienić konfiguracja zasób Governor, użytkownik wymaga uprawnienia CONTROL SERVER.Uprawnienia są sprawdzane podczas żadnych instrukcji zasób Governor DDL są wykonywane.
Aby wyświetlić aktywnej konfiguracja, dostarczane przez dynamiczne zarządzanie widokami, użytkownik wymaga uprawnienia VIEW SERVER STATE.
Zaleca się, że możliwość tworzenia lub zmiany konfiguracja zasób Governor znajduje się administratorom doświadczonych bazy danych.
Pula zasób i grupa obciążenia nazw
Wszystkie nazwy zasób puli i grupa obciążenia są skierowaną publicznego.Podczas tworzenia pól i grup, należy wybrać nazwy, które nie ujawniać informacje na temat charakteru aplikacji, które są uruchomione na serwerze.Na przykład obciążenie pracą grupę o nazwie CompanyPayroll zawiera wskazanie oczywiste charakteru i krytyczności aplikacji, które wykorzystują grupy obciążenie pracą.
Klasyfikator funkcja zdefiniowana przez użytkownika
funkcja zdefiniowanej przez użytkownika klasyfikatora (UDF) jest przechowywana w wzorzec bazy danych.
Ta funkcja jest podobna do wyzwalaczy Logowanie w jego projektowanie i wdrażanie i jest uruchamiana po wyzwalacze Logowanie jako część procesu logowania.Funkcja jest wykonywany w kontekście sesja, tworzenie żądania logowania i klasyfikacji musi zakończyć się przed faktycznie ustanowieniu sesja.Dlatego też wszystkich wiadomości pochodzących z wewnątrz funkcja klasyfikatora, które normalnie docierają użytkownika, takie jak komunikaty o błędach i komunikaty z instrukcja PRINT są kierowane do SQL Server Dziennik błędów.
Ostrzeżenie
Mimo że ta wersja programu zasób Governor implementuje schemabinding ograniczyć wywołania, które mogą być dokonywane z w obrębie klasyfikatora UDF, wszystkie dane zwrócone przez funkcja jest zawsze bezpieczne.Aby uzyskać więcej informacji zobaczUwagi dotyczące pisania funkcja klasyfikatora.
Należy uwzględnić następujące aspekty klasyfikatora zachowanie funkcja zdefiniowanej przez użytkownika:
Governor zasób działa ta funkcja jako część klasyfikacji w kontekście użytkownika logowania domyślnie lub jako wyznaczonego Jeśli wykonać AS jest określony w funkcji.
Po uruchomieniu tej funkcja w ramach klasyfikacji zasób Governor nie sprawdza uprawnienie wykonać klasyfikatora UDF.Jednak wszystkie obiekty, do którego odwołuje się za pomocą funkcja mają być przedmiotem kontroli standardowe uprawnienia, które mogą zezwolić na dostęp, oparte na łańcuch własności.
Rejestrowanie jako regulator zasób funkcja klasyfikatora nie ma wpływu na jego poziomy uprawnień użycie poza zakresem zasób Governor klasyfikacji.
Własność łańcuchy zasób Governor
Można polegać na połączeniu oparte na schemacie własność domyślne lub udzielić dostępu użytkownika do schematu, uruchamiając zasób Governor klasyfikacji za pomocą wykonać AS.Poniższy przykład kodu i komentarze ilustrują, jak tworzenie łańcucha własności zasób Governor działa.
Uwaga
W poniższym przykładzie założono, że identyfikatory logowania SQL są włączone.
Następujący kod tworzy (użytkownicy) schematuSchemaUser1, 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
Następujący kod tworzy użytkownika (NormalUser1) z domyślnych uprawnień logowania.
CREATE LOGIN NormalUser1 WITH PASSWORD='your password here';
CREATE USER NormalUser1 FOR LOGIN [NormalUser1];
go
Następujący kod tworzy schematy)Schema1, Schema2) i mapuje je użytkownikom schematu, które zostały utworzone. Tworzy również (tabelagroupTable) dla schematy.
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
Następujący 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 miejscu 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
W poniższym kodzie rejestruje funkcja poprzedniego jako klasyfikatora UDF.Należy zauważyć, że SchemaUser1 nie ma uprawnień do dostępu do Schema2.
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION=Schema1.classifier);
ALTER RESOURCE GOVERNOR RECONFIGURE
go
Jako test spróbuj zalogować się jako NormalUser1 z innego połączenia klient.Otwórz Podgląd zdarzenie systemu Windows.Należy skontaktować się z wpisem błąd klasyfikatora w dzienniku aplikacji.NormalUser1 dziedziczy prawa dostępu dla Schema1.groupTable przez tworzenie łańcuchów z Schema1.classifier własności.Schema1 nie ma uprawnień dostępu Schema2.groupTable.
Jak inny test udzielić SELECT uprawnienia do SchemaUser1 dla Schema2.groupTable.
GRANT SELECT ON Schema2.groupTable TO SchemaUser1
go
Zaloguj się jako NormalUser1.Ponownie zostanie wyświetlony wpis błąd klasyfikatora w zdarzenie dziennika.Ten błąd jest spowodowane tym, że serwer sprawdza, czy NormalUser1 ma uprawnienie SELECT, które nie są dziedziczone z SchemaUser1.
W następnym przykładzie utworzono innej funkcja klasyfikatora.Ten czas logowania otrzymują uprawnienie do wykonać 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
Ponieważ nowa funkcja działa w kontekście SchemaUser1 i SchemaUser1 ma uprawnienie SELECT na Schema2.groupTable, funkcja Schema1.classifier2() podczas logowania NormalUser1 zostanie uruchomione pomyślnie.
Zaloguj się ponownie jako NormalUser1 i sprawdzić dziennik zdarzeń pod kątem błąd klasyfikatora.
Uwaga
Ponieważ NormalUser1 nie przyznano uprawnienie wykonać funkcja Schema1.classifier2, NormalUser1 nie może uruchomić funkcja w trybie ad-hoc.
Aby uzyskać więcej informacji zobaczOwnership Chains.
Testowanie funkcja klasyfikatora
Należy sprawdzić i zoptymalizować funkcja klasyfikatora, przed użyciem go do klasyfikowania przychodzące żądania.Funkcja słabo pisemnej może uszkodzić system wyczerpaniem limitu i ujawniania informacji dotyczących konfiguracja.Dedykowany połączenia administratora (DAC) służy do rozwiązywania problemów z funkcją klasyfikatora podczas zasób Governor jest włączony, ponieważ to połączenie nie podlega klasyfikacji.Zaleca się, że masz DAC włączone na serwerze.Aby uzyskać więcej informacji zobaczUsing a Dedicated Administrator Connection.
Uwaga
Jeśli DAC nie jest dostępny do rozwiązywania problemów; innych opcji jest wymagane ponowne uruchomienie systemu w trybie pojedynczego użytkownika.Tryb jednego użytkownika nie są uzależnione od klasyfikacji, jednak ono nie daje możliwość zdiagnozować klasyfikatora zasób Governor jest uruchomiona.