Udostępnij za pośrednictwem


inspekcja SQL Server (Database Engine)

Applies to:SQL ServerAzure SQL Managed Instance

Audytowanie instancji Silnika Bazy Danych SQL Server lub poszczególnych baz danych obejmuje śledzenie i rejestrowanie zdarzeń występujących w Silniku Bazy Danych. Audyty SQL Server umożliwiają tworzenie audytów serwerów, które mogą zawierać specyfikacje audytu serwera dla zdarzeń na poziomie serwera oraz specyfikacje audytu bazy danych dla zdarzeń na poziomie bazy danych. Zdarzenia inspekcji można zapisywać w dziennikach zdarzeń lub w plikach inspekcji.

Istnieje kilka poziomów inspekcji dla SQL Server, w zależności od wymagań dotyczących instytucji rządowych lub standardów dla instalacji. SQL Server Audit udostępnia narzędzia i procesy, które należy włączyć, przechowywać i wyświetlać inspekcje na różnych obiektach serwera i bazy danych.

Można rejestrować grupy akcji inspekcji serwera na wystąpienie oraz grupy akcji inspekcji bazy danych lub akcje inspekcji bazy danych dla bazy danych. Zdarzenie inspekcji występuje za każdym razem, gdy napotkano akcję z możliwością inspekcji.

Ten artykuł dotyczy SQL Server i Azure SQL Managed Instance.

SQL Server Składniki inspekcji

inspekcji to połączenie kilku elementów w jeden pakiet dla określonej grupy akcji serwera lub akcji bazy danych. Składniki inspekcji SQL Server łączą się w celu utworzenia danych wyjściowych nazywanych inspekcją, podobnie jak definicja raportu połączona z elementami grafiki i danych tworzy raport.

Audyt SQL Server używa Extended Events w celu utworzenia audytu. Aby uzyskać więcej informacji na temat zdarzeń rozszerzonych, zobacz Omówienie zdarzeń rozszerzonych.

inspekcja SQL Server

Obiekt SQL Server Audit zbiera pojedyncze wystąpienie akcji serwera lub akcji na poziomie bazy danych oraz grup akcji do monitorowania. Audyt jest na poziomie wystąpienia SQL Server. Możesz mieć wiele inspekcji dla instancji SQL Server.

Podczas definiowania inspekcji należy określić lokalizację wyników audytu. Jest to miejsce docelowe inspekcji. Audyt jest tworzony w stanie wyłączonym i nie wykonuje automatycznych audytów żadnych działań. Po włączeniu inspekcji miejsce docelowe inspekcji odbiera dane z inspekcji.

Specyfikacja inspekcji serwera

Obiekt Server Audit Specification należy do audytu. Można utworzyć jedną specyfikację audytu serwera na potrzeby audytu, ponieważ obie są tworzone na poziomie wystąpienia SQL Server.

Specyfikacja inspekcji serwera zbiera wiele grup działań na poziomie serwera generowanych przez funkcję Zdarzenia rozszerzone. Grupy działań kontroli można uwzględnić w specyfikacji kontroli serwera. Grupy akcji inspekcji to wstępnie zdefiniowane grupy akcji, które są zdarzeniami atomowymi występującymi w Silniku Bazy Danych. Te akcje są wysyłane do inspekcji, która rejestruje je w obiekcie docelowym.

Grupy akcji inspekcji na poziomie serwera są opisane w artykule SQL Server Audit action groups and actions.

Notatka

Ze względu na ograniczenia wydajności, tempdb i tabele tymczasowe nie są audytowane. Chociaż grupa akcji zakończona w partii przechwytuje instrukcje dotyczące tabel tymczasowych, może nie poprawnie wypełniać nazw obiektów. Jednak tabela źródłowa jest zawsze poddawana audytowi, zapewniając, że wszystkie wstawki z tabeli źródłowej do tabel tymczasowych są rejestrowane.

Specyfikacja inspekcji bazy danych

Obiekt Database Audit Specification należy również do audytu SQL Server. Możesz utworzyć jedną specyfikację inspekcji bazy danych dla każdej bazy danych SQL Server dla każdej inspekcji.

Specyfikacja inspekcji bazy danych zbiera akcje inspekcji na poziomie bazy danych zgłoszone przez funkcję Zdarzenia rozszerzone. Możesz dodać grupy akcji inspekcji lub zdarzenia inspekcji do specyfikacji inspekcji bazy danych. Audit events to atomowe działania, które mogą być poddawane inspekcji przez silnik SQL Server. Grupy akcji kontrolnych są wstępnie zdefiniowanymi grupami działań. Obie znajdują się w zakresie bazy danych SQL Server. Te akcje są wysyłane do inspekcji, która rejestruje je w obiekcie docelowym. Nie dołączaj do specyfikacji audytu bazy danych użytkownika obiektów o zakresie serwera, takich jak widoki systemowe.

Grupy akcji inspekcji na poziomie bazy danych oraz akcje inspekcji zostały opisane w artykule Grupy akcji i akcje inspekcji w SQL Server Audit.

Cel

Wyniki inspekcji są wysyłane do obiektu docelowego, który może być plikiem, dziennikiem zdarzeń Zabezpieczenia systemu Windows lub dziennikiem zdarzeń aplikacji Windows. Dzienniki muszą być okresowo przeglądane i archiwizowane, aby upewnić się, że miejsce docelowe ma wystarczającą ilość miejsca do zapisu większej liczby rekordów.

Ważny

Każdy uwierzytelniony użytkownik może odczytywać i zapisywać dane w dzienniku zdarzeń aplikacji Windows. Dziennik zdarzeń aplikacji wymaga niższych uprawnień niż dziennik zdarzeń Zabezpieczenia systemu Windows i jest mniej bezpieczny niż dziennik zdarzeń Zabezpieczenia systemu Windows.

Zapisywanie w dzienniku zabezpieczeń systemu Windows wymaga dodania konta usługi SQL Server do zasady Generowanie inspekcji zabezpieczeń. Domyślnie system lokalny, usługa lokalna i usługa sieciowa są częścią tych zasad. To ustawienie można skonfigurować za pomocą modułu zasad zabezpieczeń (secpol.msc). Ponadto należy włączyć zasadę zabezpieczeń Inspekcja dostępu do obiektów zarówno dla powodzenia, jak i niepowodzenia. To ustawienie można skonfigurować za pomocą modułu zasad zabezpieczeń (secpol.msc). W Windows Vista lub Windows Server 2008 (i nowszych) można ustawić bardziej szczegółową politykę generowaną przez aplikację za pomocą wiersza polecenia przy użyciu programu do zarządzania zasadami audytu (AuditPol.exe). Aby uzyskać więcej informacji na temat kroków umożliwiających zapisywanie w dzienniku zabezpieczeń systemu Windows, zobacz Zdarzenia audytu SQL Server w dzienniku zabezpieczeń. Aby uzyskać więcej informacji na temat programu Auditpol.exe, zobacz artykuł z bazy wiedzy 921469, Jak używać zasad grupy do konfigurowania szczegółowej inspekcji zabezpieczeń. Dzienniki zdarzeń Windows są globalne dla systemu operacyjnego Windows. Aby uzyskać więcej informacji na temat dzienników zdarzeń Windows, zobacz Omówienie Podglądu Zdarzeń. Jeśli potrzebujesz bardziej precyzyjnych uprawnień dla inspekcji, użyj docelowego pliku binarnego.

Podczas zapisywania informacji inspekcji w pliku, aby zapobiec manipulacji, możesz ograniczyć dostęp do lokalizacji pliku w następujący sposób:

  • Konto usługi SQL Server musi mieć uprawnienia odczyt i zapis.

  • Administratorzy inspekcji zazwyczaj wymagają uprawnień do odczytu i zapisu. Zakłada się, że administratorzy inspekcji są kontami Windows w celu administrowania plikami inspekcji, takie jak kopiowanie ich do różnych udziałów, tworzenie kopii zapasowych itd.

  • Czytelnicy inspekcji, autoryzowani do odczytu plików, muszą uzyskać uprawnienia do odczytu.

Nawet jeśli Database Engine zapisuje w pliku, inni użytkownicy Windows mogą odczytać plik inspekcji, jeśli mają uprawnienia. Database Engine nie ma blokady wyłącznej, która uniemożliwia operacje odczytu.

Ponieważ mechanizm bazy danych może uzyskać dostęp do pliku, loginy SQL Server, które mają uprawnienia CONTROL SERVER, mogą uzyskiwać dostęp do plików inspekcji za pomocą mechanizmu bazy danych. W SQL Server 2022 (16.x) i nowszych wersjach uprawnienie VIEW SERVER SECURITY AUDIT jest wystarczające do odczytu plików inspekcji przy użyciu fn_get_audit_file. Aby zarejestrować dowolnego użytkownika, który odczytuje plik inspekcji, zdefiniuj inspekcję na master.sys.fn_get_audit_file. Rejestruje logowania z uprawnieniami CONTROL SERVER, które miały dostęp do pliku inspekcji za pośrednictwem SQL Server. Aby uzyskać więcej informacji na temat fn_get_audit_file uprawnień, zobacz sys.fn_get_audit_file.

Jeśli administrator inspekcji kopiuje plik do innej lokalizacji (w celu archiwizacji itd.), listy kontroli dostępu (ACL) w nowej lokalizacji powinny zostać zredukowane do następujących uprawnień:

  • Administrator inspekcji — odczyt/zapis
  • Czytnik audytu — odczyt

Zalecamy generowanie raportów inspekcji z oddzielnego wystąpienia SQL Server, takiego jak wystąpienie SQL Server Express, do którego mają dostęp tylko administratorzy inspekcji lub czytelnicy inspekcji. Korzystając z oddzielnego wystąpienia Database Engine na potrzeby raportowania, można zapobiec nieautoryzowanym użytkownikom w uzyskiwaniu dostępu do rekordu audytu.

Możesz zapewnić dodatkową ochronę przed nieautoryzowanym dostępem, szyfrując folder, w którym plik inspekcji jest przechowywany, używając szyfrowania dysku za pomocą BitLocker lub Systemu szyfrowania plików Windows.

Aby uzyskać więcej informacji na temat rekordów audytu zapisywanych w celu, zobacz Rekordy audytu SQL Server.

Omówienie korzystania z usługi SQL Server Audit

Do zdefiniowania inspekcji można użyć SQL Server Management Studio lub Transact-SQL. Po utworzeniu i włączeniu inspekcji element docelowy odbiera wpisy.

Dzienniki zdarzeń Windows można odczytać przy użyciu narzędzia Podgląd zdarzeń w Windows. W przypadku obiektów docelowych plików można użyć Log File Viewer w SQL Server Management Studio lub funkcji fn_get_audit_file do odczytu pliku docelowego.

Ogólny proces tworzenia i używania inspekcji jest następujący.

  1. Utwórz audyt i zdefiniuj cel.
  2. Utwórz specyfikację audytu serwera lub specyfikację audytu bazy danych, która jest zmapowana na inspekcję. Włącz specyfikację inspekcji.
  3. Włącz inspekcję.
  4. Odczytywanie zdarzeń inspekcji przy użyciu Windows Podgląd zdarzeńLog File Viewer lub funkcji fn_get_audit_file.

Aby uzyskać więcej informacji, zobacz Utwórz audyt serwera i specyfikację audytu serwera oraz Utwórz audyt serwera i specyfikację audytu bazy danych.

Zagadnienia dotyczące

W przypadku awarii podczas inicjowania inspekcji serwer nie uruchamia się. W takim przypadku serwer można uruchomić przy użyciu -f opcji w wierszu polecenia.

Gdy błąd inspekcji powoduje zamknięcie serwera lub jego nieuruchomienie, ponieważ element ON_FAILURE = SHUTDOWN jest określony dla audytu, zdarzenie MSG_AUDIT_FORCED_SHUTDOWN jest zapisywane w dzienniku. Ponieważ zamknięcie następuje przy pierwszym napotkaniu tej opcji, zdarzenie jest rejestrowane tylko raz. To zdarzenie jest zapisywane po komunikacie o błędzie inspekcji powodującym zamknięcie. Administrator może pominąć zamknięcia wywołane inspekcją, uruchamiając SQL Server w trybie pojedynczego użytkownika przy użyciu flagi -m. Jeśli rozpoczniesz pracę w trybie pojedynczego użytkownika, zmienisz na niższy poziom każdą inspekcję, w przypadku której określono ON_FAILURE = SHUTDOWN do uruchomienia w tej sesji jako ON_FAILURE = CONTINUE. Po uruchomieniu SQL Server z flagą -m komunikat MSG_AUDIT_SHUTDOWN_BYPASSED jest zapisywany w dzienniku błędów.

Aby uzyskać więcej informacji na temat opcji uruchamiania usługi, zobacz Opcje uruchamiania usługi bazy danych Database Engine.

Operacje wewnętrzne w Azure SQL Managed Instance

  • W Azure SQL Database i Azure SQL Managed Instance zdarzenia inicjowane przez SQLDBControlPlaneFirstPartyApp są funkcją wewnętrzną warstwy kontrolnej Azure SQL Database. Zdarzenia inicjowane przez SQLDBControlPlaneFirstPartyApp są częścią wewnętrznej operacji synchronizacji między aparatem SQL a Azure Resource Manager. Te zdarzenia są normalną częścią zarządzania zasobami i są wymagane do prawidłowej reprezentacji zasobów i operacji w Azure.

Dołączanie bazy danych ze zdefiniowaną inspekcją

Dołączanie bazy danych, która ma specyfikację inspekcji i określa identyfikator GUID, który nie istnieje na serwerze, powoduje osieroconą specyfikację inspekcji. Ponieważ inspekcja z pasującym identyfikatorem GUID nie istnieje w wystąpieniu serwera, żadne zdarzenia inspekcji nie są rejestrowane. Aby rozwiązać tę sytuację, użyj polecenia ALTER DATABASE AUDIT SPECIFICATION, aby połączyć porzuconą specyfikację audytu z istniejącym audytem serwera. Możesz też użyć polecenia , CREATE SERVER AUDIT aby utworzyć nową inspekcję serwera z określonym identyfikatorem GUID.

Bazę danych, która ma zdefiniowaną specyfikację inspekcji, można dołączyć do innej wersji SQL Server, która nie obsługuje inspekcji SQL Server, takich jak SQL Server Express, ale nie rejestruje zdarzeń inspekcji.

Dublowanie bazy danych i inspekcja SQL Server

Baza danych, która ma zdefiniowaną specyfikację inspekcji bazy danych i która używa dublowania bazy danych, obejmuje specyfikację inspekcji bazy danych. Aby poprawnie działało na zmirrowanych wystąpieniach SQL, należy skonfigurować następujące elementy:

  • Serwer lustrzany musi mieć audyt z tym samym identyfikatorem GUID, aby specyfikacja audytu bazy danych mogła zapisywać rekordy audytów. Można to skonfigurować za pomocą polecenia CREATE AUDIT WITH GUID = <guid-from-source-server-audit>.

  • W przypadku obiektów docelowych plików binarnych konto usługi serwera dublowania musi mieć odpowiednie uprawnienia do lokalizacji, w której jest zapisywany dziennik inspekcji.

  • W przypadku docelów dziennika zdarzeń Windows zasady zabezpieczeń komputera, na którym znajduje się serwer dublowania, muszą zezwalać kontu usługi na dostęp do dziennika zdarzeń zabezpieczeń lub aplikacji.

Inspekcja działania administratora

Członkowie sysadmin stałej roli serwera są identyfikowani jako użytkownik dbo w każdej bazie danych. Aby przeprowadzić inspekcję akcji administratorów, przeprowadź inspekcję akcji użytkownika dbo.

Uprawnienia

Każda funkcja i polecenie dla SQL Server Audit mają indywidualne wymagania dotyczące uprawnień.

Aby utworzyć, zmienić lub usunąć kontrolę serwera lub specyfikację inspekcji serwera, podmioty zabezpieczeń serwera wymagają ALTER ANY SERVER AUDIT lub CONTROL SERVER uprawnień. Aby utworzyć, zmienić lub usunąć specyfikację audytu bazy danych, podmioty bazy danych potrzebują ALTER ANY DATABASE AUDIT uprawnień lub ALTER uprawnień do bazy danych. Ponadto użytkownicy muszą mieć uprawnienia do nawiązania połączenia z bazą danych lub posiadać uprawnienia ALTER ANY SERVER AUDIT lub CONTROL SERVER.

Uprawnienie VIEW ANY DEFINITION zapewnia dostęp do wyświetlania widoków inspekcji na poziomie serwera i VIEW DEFINITION zapewnia dostęp do wyświetlania widoków inspekcji na poziomie bazy danych. Odmowa tych uprawnień znosi możliwość wyświetlania widoków katalogu, nawet jeśli podmiot zabezpieczeń ma uprawnienia ALTER ANY SERVER AUDIT lub ALTER ANY DATABASE AUDIT.

Aby odczytywać dane inspekcji przy użyciu fn_get_audit_file, SQL Server 2019 (15.x) i starsze wersje wymagają uprawnień CONTROL SERVER na serwerze, podczas gdy SQL Server 2022 (16.x) i nowsze wersje wymagają uprawnień VIEW SERVER SECURITY AUDIT. Aby uzyskać więcej informacji, zobacz sys.fn_get_audit_file.

Aby uzyskać więcej informacji na temat udzielania praw i uprawnień, zobacz GRANT.

Ostrożność

Użytkownicy w roli administratora systemu mogą ingerować w dowolny składnik inspekcji, a użytkownicy w roli db_owner mogą ingerować w specyfikacje inspekcji w bazie danych. SQL Server Audit sprawdza, czy logowanie, które tworzy lub zmienia specyfikację inspekcji, ma co najmniej uprawnienie ALTER ANY DATABASE AUDIT. Nie jest to jednak weryfikowane podczas dołączania bazy danych. Należy założyć, że wszystkie specyfikacje inspekcji bazy danych są tak wiarygodne, jak osoby pełniące rolę sysadmin lub db_owner.

Tworzenie inspekcji i zarządzanie nimi za pomocą Transact-SQL

Można użyć instrukcji DDL, dynamicznych widoków zarządzania i funkcji oraz widoków wykazu, aby zaimplementować wszystkie aspekty SQL Server Audit.

Instrukcje języka definicji danych

Następujące instrukcje DDL umożliwiają tworzenie, modyfikowanie i usuwanie specyfikacji inspekcji:

Instrukcje DDL Opis
#ALTER AUTHORIZATION Zmienia własność zabezpieczanego obiektu.
ALTER SPECYFIKACJA AUDYTOWANIA BAZY DANYCH Zmienia obiekt specyfikacji inspekcji bazy danych przy użyciu funkcji SQL Server Audit.
ALTER SERVER AUDIT Zmienia obiekt inspekcji serwera przy użyciu funkcji inspekcji SQL Server.
ZMIEŃ SPECYFIKACJĘ AUDYTU SERWERA Zmienia obiekt specyfikacji inspekcji serwera przy użyciu funkcji inspekcji SQL Server.
Tworzenie specyfikacji audytu bazy danych Tworzy obiekt specyfikacji inspekcji bazy danych przy użyciu funkcji inspekcji SQL Server.
UTWÓRZ AUDYT SERWERA Tworzy obiekt inspekcji serwera przy użyciu SQL Server Audit.
UTWÓRZ SPECYFIKACJĘ AUDYTU SERWERA Tworzy obiekt specyfikacji inspekcji serwera przy użyciu funkcji inspekcji SQL Server.
USUŃ SPECYFIKACJĘ AUDYTU BAZY DANYCH Usuwa obiekt specyfikacji audytu bazy danych przy użyciu mechanizmu SQL Server Audit.
ZRZUĆ AUDYT SERWERA Usuwa obiekt inspekcji serwera przy użyciu funkcji audytu SQL Server.
USUŃ SPECYFIKACJĘ AUDYTU SERWERA Usuń obiekt specyfikacji audytu serwera przy użyciu funkcji audytu SQL Server.

Dynamiczne widoki i funkcje

W poniższej tabeli wymieniono dynamiczne widoki i funkcje, których można użyć do inspekcji SQL Server.

Dynamiczne widoki i funkcje Opis
sys.dm_audit_actions Zwraca wiersz dla każdej akcji inspekcji, którą można zgłosić w dzienniku inspekcji i każdej grupie akcji inspekcji, którą można skonfigurować w ramach SQL Server Audit.
sys.dm_server_audit_status Zawiera informacje o bieżącym stanie inspekcji.
sys.dm_audit_class_type_map Zwraca tabelę, która mapuje pole class_type w dzienniku audytu na pole class_desc w sys.dm_audit_actions.
fn_get_audit_file Zwraca informacje z pliku inspekcji utworzonego przez inspekcję serwera.

Widoki wykazu

W poniższej tabeli wymieniono widoki wykazu, których można użyć do inspekcji SQL Server.

Widoki wykazu Opis
specyfikacje kontroli baz danych sys.database_audit_specifications Zawiera informacje o specyfikacjach audytu bazy danych w audycie SQL Server na wystąpieniu serwera.
sys.szczegóły_specyfikacji_audytu_bazy_danych Zawiera informacje o specyfikacjach kontroli bazy danych w kontroli SQL Server na wystąpieniu serwera dla wszystkich baz danych.
sys.server_audits Zawiera jeden wiersz dla każdego audytu SQL Server w wystąpieniu serwera.
sys.specyfikacje_audytu_serwera Zawiera informacje o specyfikacji audytu serwera w inspekcji SQL Server na wystąpieniu serwera.
sys.szczegóły_specyfikacji_audytu_serwera Zawiera informacje o szczegółach specyfikacji audytu serwera (akcje) w audycie w instancji serwera SQL Server.
sys.server_file_audits Zawiera rozszerzone informacje o typie audytu plików w audytach SQL Server na wystąpieniu serwera.

Następne kroki