Share via


SQL Server Controleren (Database Engine)

Applies to:SQL ServerAzure SQL Managed Instance

Auditing een instance van de SQL Server Database Engine of een afzonderlijke database omvat het bijhouden en vastleggen van voorvallen die plaatsvinden op de Database Engine. SQL Server audit kunt u servercontroles maken, die servercontrolespecificaties kunnen bevatten voor gebeurtenissen op serverniveau en databasecontrolespecificaties voor gebeurtenissen op databaseniveau. Gecontroleerde gebeurtenissen kunnen worden geschreven naar de gebeurtenislogboeken of naar auditbestanden.

Er zijn verschillende controleniveaus voor SQL Server, afhankelijk van de overheids- of standaardenvereisten voor uw installatie. SQL Server Audit biedt de hulpprogramma's en processen die u nodig hebt om controles op verschillende server- en databaseobjecten in te schakelen, op te slaan en weer te geven.

U kunt actiegroepen voor servercontrole per exemplaar vastleggen en databasecontroleactiegroepen of databasecontroleacties per database. De controlegebeurtenis vindt elke keer plaats wanneer de controleerbare actie wordt aangetroffen.

Dit artikel is van toepassing op SQL Server en Azure SQL Managed Instance.

  • Alle edities van SQL Server ondersteunen controles op serverniveau. In SQL Server 2016 (13.x) met Service Pack 1 en latere versies ondersteunen alle edities controles op databaseniveau. Vóór SQL Server 2016 (13.x) was controle op databaseniveau beperkt tot Enterprise-, Developer- en Evaluation-edities. Zie Bewerken en ondersteunde functies van SQL Server 2016 voor meer informatie.
  • In Azure SQL Managed Instance wordt SQL Server-audit ondersteund en zijn er verschillen tussen databases in Azure SQL Managed Instance en databases in SQL Server.
  • Zie Auditing voor Azure SQL Database voor de SQL Database.

SQL Server Auditcomponenten

Een audit is de combinatie van verschillende elementen in één pakket voor een specifieke groep serveracties of databaseacties. De onderdelen van SQL Server audit combineren om een uitvoer te produceren die een controle wordt genoemd, net zoals een rapportdefinitie gecombineerd met afbeeldingen en gegevenselementen een rapport produceert.

SQL Server audit maakt gebruik van Extended Events om een controle te maken. Zie Overzicht van uitgebreide gebeurtenissen voor meer informatie over uitgebreide gebeurtenissen.

SQL Server Audit

Het object SQL Server Audit verzamelt één exemplaar van acties op server- of databaseniveau en groepen acties die moeten worden bewaakt. De controle bevindt zich op SQL Server instantieniveau. U kunt meerdere controles per SQL Server exemplaar hebben.

Wanneer u een controle definieert, geeft u de locatie op voor de uitvoer van de resultaten. Dit is de controlebestemming. De controle wordt gemaakt in een uitgeschakelde status en controleert niet automatisch acties. Nadat de controle is ingeschakeld, ontvangt de controlebestemming gegevens van de audit.

Specificatie voor serveraudit

Het Server Audit Specificatie-object behoort tot een controle. U kunt per audit één servercontrolespecificatie maken, omdat beide worden gemaakt op het SQL Server-instantie-bereik.

De controlespecificatie van de server verzamelt veel actiegroepen op serverniveau die worden gegenereerd door de functie Uitgebreide gebeurtenissen. U kunt actiegroepen voor controle opnemen in een servercontrolespecificatie. Controleactiegroepen zijn vooraf gedefinieerde groepen acties, die atomische gebeurtenissen zijn die plaatsvinden in de Database Engine. Deze acties worden naar de audit verzonden, waar ze in het doel worden geregistreerd.

Controleactiegroepen op serverniveau worden beschreven in het artikel SQL Server Audit action groups and actions.

Notitie

Vanwege prestatiebeperkingen worden tempdb en tijdelijke tabellen niet geauditeerd. Hoewel de actiegroep met batch voltooide instructies vastlegt voor tijdelijke tabellen, worden de objectnamen mogelijk niet correct ingevuld. De brontabel wordt echter altijd gecontroleerd, zodat alle invoegingen van de brontabel naar tijdelijke tabellen worden vastgelegd.

Databasecontrolespecificatie

Het object Databasecontrolespecificatie behoort ook tot een SQL Server audit. U kunt één databasecontrolespecificatie per SQL Server database per controle maken.

De databasecontrolespecificatie verzamelt controleacties op databaseniveau die worden gegenereerd door de functie Uitgebreide gebeurtenissen. U kunt controleactiegroepen of controlegebeurtenissen toevoegen aan een databasecontrolespecificatie. Auditgebeurtenissen zijn de atomische acties die kunnen worden gecontroleerd door de SQL Server-engine. Audit-actiegroepen zijn vooraf gedefinieerde groepen van acties. Beide bevinden zich in het SQL Server databasebereik. Deze acties worden naar de audit verzonden, waar ze in het doel worden geregistreerd. Neem geen objecten met serverbereik op, zoals de systeemweergaven, in een auditspecificatie van een gebruikersdatabase.

Auditactiegroepen en controleacties op databaseniveau worden beschreven in het artikel SQL Server Actiegroepen en acties controleren.

Doel

De resultaten van een audit worden verzonden naar een doel, dat een bestand, het Windows-beveiliging gebeurtenislogboek of het Windows toepassingsgebeurtenislogboek kan zijn. Logboeken moeten periodiek worden gecontroleerd en gearchiveerd om ervoor te zorgen dat het doel voldoende ruimte heeft om meer records te schrijven.

Belangrijk

Elke geverifieerde gebruiker kan het gebeurtenislogboek van de Windows toepassing lezen en schrijven. Het gebeurtenislogboek van de toepassing vereist lagere machtigingen dan het Windows-beveiliging gebeurtenislogboek en is minder veilig dan het Windows-beveiliging gebeurtenislogboek.

Schrijven naar het Windows-beveiliging-logboek vereist dat het SQL Server-serviceaccount wordt toegevoegd aan het beleid Generate security audits. Het lokale systeem, de lokale service en de netwerkservice maken standaard deel uit van dit beleid. Deze instelling kan worden geconfigureerd met behulp van de module beveiligingsbeleid (secpol.msc). Daarnaast moet het objecttoegang beveiligingsbeleid beveiligingsbeleid zijn ingeschakeld voor zowel succesvolle als misluktetoegang. Deze instelling kan worden geconfigureerd met behulp van de module beveiligingsbeleid (secpol.msc). In Windows Vista of Windows Server 2008 (en hoger) kunt u de gedetailleerdere toepassing gegenereerdbeleid vanaf de opdrachtregel instellen met behulp van het controlebeleidsprogramma (AuditPol.exe). Zie Write SQL Server Audit events to the Security log voor meer informatie over de stappen om het schrijven naar het Windows-beveiliging-logboek in te schakelen. Zie het Knowledge Base-artikel 921469 Groepsbeleid gebruiken om gedetailleerde beveiligingscontrole-te configureren voor meer informatie over het Auditpol.exe-programma. De Windows gebeurtenislogboeken zijn globaal voor het Windows besturingssysteem. Zie Logboeken Overview voor meer informatie over de Windows gebeurtenislogboeken. Als u nauwkeurigere machtigingen voor de controle nodig hebt, gebruikt u het binaire doelbestand.

Wanneer u controlegegevens opslaat in een bestand om manipulatie te voorkomen, kunt u de toegang tot de bestandslocatie op de volgende manieren beperken:

  • Het SQL Server-serviceaccount moet zowel de machtiging Lezen als Schrijven hebben.

  • Auditbeheerders hebben doorgaans lees- en schrijfmachtigingen nodig. Hierbij wordt ervan uitgegaan dat de auditbeheerders zijn Windows accounts voor het beheer van controlebestanden, zoals het kopiëren naar verschillende shares, het maken van back-ups, enzovoort.

  • Auditlezers die gemachtigd zijn om auditbestanden te lezen, moeten over de machtiging Lezen beschikken.

Zelfs wanneer de Database Engine naar een bestand schrijft, kunnen andere Windows gebruikers het auditbestand lezen als ze gemachtigd zijn. De Database Engine heeft geen exclusieve vergrendeling die leesbewerkingen voorkomt.

Omdat de Database Engine toegang heeft tot het bestand, kunnen SQL Server aanmeldingen met CONTROL SERVER machtiging de Database Engine gebruiken om toegang te krijgen tot de auditbestanden. In SQL Server 2022 (16.x) en latere versies is de machtiging VIEW SERVER SECURITY AUDIT voldoende om auditbestanden te lezen met behulp van fn_get_audit_file. Als u een gebruiker wilt vastleggen die het auditbestand leest, definieert u een controle op master.sys.fn_get_audit_file. Hiermee worden de aanmeldingen vastgelegd met CONTROL SERVER machtiging die via SQL Server toegang hebben tot het controlebestand. Zie fn_get_audit_file voor meer informatie over machtigingen.

Als een controlebeheerder het bestand kopieert naar een andere locatie (voor archiefdoeleinden, enzovoort), moeten de toegangsbeheerlijsten (ACL's) op de nieuwe locatie worden gereduceerd tot de volgende machtigingen:

  • Controlebeheerder - Lezen/schrijven
  • Auditlezer - Lezen

U wordt aangeraden auditrapporten te genereren van een afzonderlijk exemplaar van SQL Server, zoals een exemplaar van SQL Server Express, waartoe alleen auditbeheerders of auditlezers toegang hebben. Door een afzonderlijk exemplaar van de Database Engine te gebruiken voor rapportage, kunt u voorkomen dat onbevoegde gebruikers toegang krijgen tot de auditrecord.

U kunt extra beveiliging bieden tegen onbevoegde toegang door de map waarin het auditbestand wordt opgeslagen te versleutelen met behulp van Windows BitLocker-stationsversleuteling of Windows Bestandssysteem versleutelen.

Zie SQL Server Auditrecords voor meer informatie over de auditrecords die naar het doel zijn geschreven.

Overzicht van het gebruik van SQL Server Audit

U kunt SQL Server Management Studio of Transact-SQL gebruiken om een controle te definiëren. Nadat de audit is gemaakt en ingeschakeld, ontvangt het doelwit gegevens.

U kunt de Windows gebeurtenislogboeken lezen met behulp van het hulpprogramma Logboeken in Windows. Voor bestandsdoelen kunt u de functie Log File Viewer in SQL Server Management Studio of de functie fn_get_audit_file gebruiken om het doelbestand te lezen.

Het algemene proces voor het maken en gebruiken van een audit is als volgt.

  1. Maak een controle en definieer het doel.
  2. Maak een serveraudit-specificatie of databaseaudit-specificatie die aan de audit is gekoppeld. Schakel de auditspecificatie in.
  3. Schakel de controle in.
  4. Lees de controlegebeurtenissen met behulp van de Windows Logboeken, Log File Viewer of de functie fn_get_audit_file.

Zie Een servercontrole- en servercontrolespecificatie maken en een servercontrole- en databasecontrolespecificatie maken voor meer informatie.

Overwegingen

In het geval van een fout tijdens het starten van de controle, wordt de server niet gestart. In dit geval kan de server worden gestart met behulp van de -f optie op de opdrachtregel.

Wanneer een auditfout ervoor zorgt dat de server wordt afgesloten of niet wordt gestart omdat ON_FAILURE = SHUTDOWN is opgegeven voor de audit, wordt de MSG_AUDIT_FORCED_SHUTDOWN gebeurtenis naar het logboek geschreven. Omdat het afsluiten plaatsvindt bij de eerste keer dat deze instelling wordt aangetroffen, wordt de gebeurtenis één keer vastgelegd. Deze gebeurtenis wordt geschreven na het foutbericht voor de audit die de afsluiting veroorzaakt. Een beheerder kan door controle geïnduceerde afsluitingen overslaan door SQL Server in de modus Voor één gebruiker te starten met behulp van de vlag -m. Als u in de modus Voor één gebruiker begint, downgradet u een audit waarvoor ON_FAILURE = SHUTDOWN is opgegeven om in die sessie uit te voeren als ON_FAILURE = CONTINUE. Wanneer SQL Server wordt gestart met de vlag -m, wordt het bericht MSG_AUDIT_SHUTDOWN_BYPASSED naar het foutenlogboek geschreven.

Zie Database Engine Service-opstartopties voor meer informatie over opstartopties voor services.

Interne bewerkingen in Azure SQL Managed Instance

  • In Azure SQL Database en Azure SQL Managed Instance zijn gebeurtenissen die zijn geïnitieerd door SQLDBControlPlaneFirstPartyApp een interne Azure functie van het Azure SQL Database besturingsvlak. Gebeurtenissen die zijn geïnitieerd door SQLDBControlPlaneFirstPartyApp maken deel uit van een interne synchronisatiebewerking tussen de SQL-engine en Azure Resource Manager. Deze gebeurtenissen zijn een normaal onderdeel van resourcebeheer en zijn vereist voor de juiste resourceweergave en -bewerking in Azure.

Een database koppelen met een gedefinieerde controle

Als u een database met een controlespecificatie koppelt en een GUID opgeeft die niet op de server bestaat, wordt een zwevende controlespecificatie veroorzaakt. Omdat er geen audit met een overeenkomende GUID (Globally Unique Identifier) bestaat op de serverinstantie, worden er geen auditevenementen vastgelegd. Als u deze situatie wilt corrigeren, gebruikt u de ALTER DATABASE AUDIT SPECIFICATION opdracht om de verweesde auditspecificatie te verbinden met een bestaande serveraudit. Of gebruik de CREATE SERVER AUDIT opdracht om een nieuwe servercontrole te maken met de opgegeven GUID.

U kunt een database waaraan een controlespecificatie is gedefinieerd, koppelen aan een andere editie van SQL Server die geen ondersteuning biedt voor SQL Server audit, zoals SQL Server Express, maar geen controlegebeurtenissen registreert.

Databasespiegeling en SQL Server Audit

Een database waarvoor een databasecontrolespecificatie is gedefinieerd en die gebruikmaakt van databasespiegeling, bevat de databasecontrolespecificatie. Als u het gespiegelde SQL-exemplaar correct wilt gebruiken, moeten de volgende items worden geconfigureerd:

  • De mirrorserver moet een controle met dezelfde GUID hebben om de databasecontrolespecificatie in te schakelen voor het schrijven van auditrecords. Dit kan worden geconfigureerd met behulp van de opdracht CREATE AUDIT WITH GUID = <guid-from-source-server-audit>.

  • Voor binaire bestanddoelen moet het serviceaccount van de mirrorserver de juiste machtigingen hebben voor de locatie waar het controlelogboek wordt geschreven.

  • Voor Windows gebeurtenislogboekdoelen moet het beveiligingsbeleid op de computer waarop de mirrorserver zich bevindt, toegang tot het beveiligings- of toepassingslogboek toestaan voor serviceaccounts.

Activiteiten van de beheerder controleren

Leden van de sysadmin vaste serverfunctie worden geïdentificeerd als de dbo gebruiker in elke database. Als u acties van de beheerders wilt controleren, controleert u de acties van de dbo gebruiker.

Machtigingen

Elke functie en opdracht voor SQL Server Audit hebben afzonderlijke machtigingsvereisten.

Als u een servercontrole- of servercontrolespecificatie wilt maken, wijzigen of verwijderen, is de ALTER ANY SERVER AUDIT of de CONTROL SERVER machtiging vereist voor server-principals. Om een databasecontrolespecificatie te maken, wijzigen of verwijderen, hebben database-principals de ALTER ANY DATABASE AUDIT-machtiging of de ALTER- of CONTROL-machtiging op de database nodig. Bovendien moeten principals gemachtigd zijn om verbinding te maken met de database, of over de juiste ALTER ANY SERVER AUDIT of CONTROL SERVER machtigingen beschikken.

De VIEW ANY DEFINITION machtiging biedt toegang om de controleweergaven op serverniveau weer te geven en VIEW DEFINITION biedt toegang tot het weergeven van de controleweergaven op databaseniveau. De ontkenning van deze machtigingen overschaduwt de mogelijkheid om de catalogusweergaven weer te geven, zelfs als de principal de ALTER ANY SERVER AUDIT of ALTER ANY DATABASE AUDIT machtigingen heeft.

Als u controlegegevens wilt lezen met fn_get_audit_file, vereisen SQL Server 2019 (15.x) en eerdere versies CONTROL SERVER machtiging op de server, terwijl SQL Server 2022 (16.x) en latere versies VIEW SERVER SECURITY AUDIT machtiging vereisen. Zie sys.fn_get_audit_file voor meer informatie.

Zie GRANT voor meer informatie over het verlenen van rechten en machtigingen.

Voorzichtigheid

Principals in de rol sysadmin kunnen knoeien met elk controleonderdeel en principals in de db_owner-rol kunnen knoeien met controlespecificaties in een database. SQL Server Audit controleert of een aanmelding die een controlespecificatie maakt of wijzigt, ten minste de machtiging ALTER ANY DATABASE AUDIT heeft. Er wordt echter geen validatie uitgevoerd wanneer u een database koppelt. U moet ervan uitgaan dat alle databasecontrolespecificaties alleen zo betrouwbaar zijn als de principals in de rol van sysadmin of db_owner.

Audits maken en beheren met Transact-SQL

U kunt DDL-instructies, dynamische beheerweergaven en -functies en catalogusweergaven gebruiken om alle aspecten van SQL Server Audit te implementeren.

Taalinstructies voor gegevensdefinities

U kunt de volgende DDL-instructies gebruiken om auditspecificaties te maken, te wijzigen en te verwijderen:

DDL-instructies Beschrijving
ALTER AUTHORIZATION Hiermee wordt het eigendom van een beveiligd object gewijzigd.
DATABASECONTROLESPECIFICATIE wijzigen Hiermee wijzigt u een databasecontrolespecificatieobject met behulp van de functie SQL Server Audit.
SERVER-AUDIT AANPASSEN Hiermee wijzigt u een servercontroleobject met behulp van de functie SQL Server Controle.
AUDITSPECIFICATIE VOOR SERVER WIJZIGEN Hiermee wijzigt u een servercontrolespecificatieobject met behulp van de functie SQL Server Controle.
DATABASECONTROLESPECIFICATIE MAKEN Hiermee maakt u een databasecontrolespecificatieobject met behulp van de SQL Server-controlefunctie.
SERVERAUDIT MAKEN Hiermee maakt u een servercontroleobject met behulp van SQL Server Audit.
SERVERCONTROLESPECIFICATIE MAKEN Hiermee maakt u een servercontrolespecificatieobject met behulp van de functie SQL Server Audit.
VERWIJDER DATABASE AUDITSPECIFICATIE Hiermee wordt een databasecontrolespecificatieobject verwijderd met behulp van de functie SQL Server Audit.
VERWIJDER SERVERAUDIT Hiermee wordt een servercontroleobject verwijderd met behulp van de functie SQL Server Controle.
VERWIJDER SERVER AUDITSPECIFICATIE Hiermee wordt een servercontrolespecificatieobject verwijderd met behulp van de functie SQL Server Controle.

Dynamische weergaven en functies

De volgende tabel bevat de dynamische weergaven en functie die u kunt gebruiken voor SQL Server Auditing.

Dynamische weergaven en functies Beschrijving
sys.dm_audit_actions Retourneert een rij voor elke controleactie die kan worden gerapporteerd in het auditlogboek en elke controleactiegroep die kan worden geconfigureerd als onderdeel van SQL Server Audit.
sys.dm_server_audit_status Bevat informatie over de huidige status van de audit.
sys.dm_audit_class_type_map Hiermee wordt een tabel geretourneerd waarmee het class_type veld in het auditlogboek wordt toegewezen aan het class_desc veld in sys.dm_audit_actions.
fn_get_audit_file Retourneert informatie uit een auditbestand dat is gemaakt door een servercontrole.

Catalogusweergaven

De volgende tabel bevat de catalogusweergaven die u kunt gebruiken voor SQL Server controle.

Catalogusweergaven Beschrijving
sys.database_audit_specifications Bevat informatie over de databasereview-specificaties in een SQL Server audit op een serverinstance.
sys.database_audit_specification_details Bevat informatie over de specificaties van database-audits in een SQL Server-audit op een serverinstantie voor alle databases.
sys.server_audits Bevat één rij voor elke SQL Server-audit in een serverinstantie.
sys.server_audit_specifications Bevat informatie over de server audit specificaties in een SQL Server audit op een serverinstantie.
sys.server_audit_specifications_details Bevat informatie over de details van de server-auditspecificatie, inclusief acties, in een SQL Server-audit op een serverinstantie.
sys.server_file_audits Bevat uitgebreide informatie over het bestaudittype in een SQL Server-audit op een serverinstantie.

Volgende stap