ดําเนินการตรวจสอบ

เสร็จสมบูรณ์เมื่อ

การตรวจสอบช่วยให้มองเห็นกิจกรรมฐานข้อมูล ช่วยให้คุณตรวจจับภัยคุกคามด้านความปลอดภัย ติดตามการปฏิบัติตามข้อกําหนด และตรวจสอบเหตุการณ์ การบันทึกว่าใครเข้าถึงข้อมูลใดและเมื่อใด การตรวจสอบจะสร้างเส้นทางความรับผิดชอบที่สนับสนุนทั้งการตรวจสอบความปลอดภัยและข้อกําหนดด้านกฎระเบียบ

ฐานข้อมูล SQL Server, Azure SQL และ SQL ใน Microsoft Fabric มีความสามารถในการตรวจสอบในตัวที่บันทึกเหตุการณ์ฐานข้อมูลโดยไม่ต้องเปลี่ยนแปลงแอปพลิเคชัน การทําความเข้าใจวิธีการกําหนดค่าและจัดการการตรวจสอบจะช่วยให้คุณรักษาการกํากับดูแลสภาพแวดล้อมฐานข้อมูลของคุณอย่างเหมาะสม

ทําความเข้าใจตัวเลือกการตรวจสอบ

การตรวจสอบจะบันทึกเหตุการณ์ฐานข้อมูลและเขียนลงในบันทึกการตรวจสอบ เหตุการณ์ที่คุณตรวจสอบ ตําแหน่งที่คุณจัดเก็บบันทึก และวิธีวิเคราะห์จะขึ้นอยู่กับข้อกําหนดด้านความปลอดภัยและโครงสร้างพื้นฐานของคุณ

ไดอะแกรมแสดงฐานข้อมูล Azure SQL ที่ส่งบันทึกการตรวจสอบไปยังปลายทางสามแห่ง: ที่เก็บข้อมูล Azure Blob สําหรับการเก็บรักษาระยะยาว พื้นที่ทํางาน Log Analytics สําหรับคิวรี KQL และฮับเหตุการณ์สําหรับการสตรีมแบบเรียลไทม์

การตรวจสอบ SQL Server ใช้โครงสร้างพื้นฐาน Extended Events เพื่อบันทึกกิจกรรม คุณสามารถเขียนบันทึกการตรวจสอบลงในไฟล์ บันทึกความปลอดภัยของ Windows หรือบันทึกแอปพลิเคชัน Windows ความยืดหยุ่นนี้ช่วยให้คุณสามารถผสานรวมกับระบบการจัดการบันทึกที่มีอยู่ได้

การตรวจสอบฐานข้อมูล Azure SQL จะเขียนไปยังที่เก็บข้อมูล Azure Blob, Log Analytics หรือฮับเหตุการณ์ บริการที่มีการจัดการจะจัดการโครงสร้างพื้นฐาน คุณจึงสามารถมุ่งเน้นไปที่การตัดสินใจว่าจะตรวจสอบอะไรมากกว่าการจัดการพื้นที่จัดเก็บข้อมูล

ฐานข้อมูล SQL ใน Microsoft Fabric ใช้การบันทึกกิจกรรมของ Fabric และ Microsoft Purview สําหรับข้อมูลการตรวจสอบ การผสานรวมกับ Microsoft Purview นี้ช่วยให้คุณมีการตรวจสอบแบบครบวงจรในทรัพย์สินข้อมูลทั้งหมดของคุณ

กําหนดค่าการตรวจสอบ SQL Server

การตรวจสอบ SQL Server ต้องการการสร้างวัตถุการตรวจสอบเซิร์ฟเวอร์ที่กําหนดตําแหน่งที่จะเขียนระเบียนการตรวจสอบ จากนั้นสร้างข้อกําหนดการตรวจสอบที่กําหนดสิ่งที่จะบันทึก

เริ่มต้นด้วยการสร้างการตรวจสอบเซิร์ฟเวอร์ที่เขียนลงในไฟล์:

CREATE SERVER AUDIT SecurityAudit
TO FILE (FILEPATH = 'C:\AuditLogs\', MAXSIZE = 100 MB, MAX_ROLLOVER_FILES = 10)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);

QUEUE_DELAYพารามิเตอร์ระบุจํานวนมิลลิวินาทีในการบัฟเฟอร์เหตุการณ์ก่อนเขียน ค่าที่ต่ํากว่าจะให้การบันทึกแบบเรียลไทม์มากขึ้น แต่อาจส่งผลต่อประสิทธิภาพการทํางาน ON_FAILUREการตั้งค่าจะกําหนดลักษณะการทํางานเมื่อการเขียนการตรวจสอบล้มเหลว ใช้สําหรับ SHUTDOWN สถานการณ์การปฏิบัติตามกฎระเบียบที่สําคัญซึ่งไม่สามารถยอมรับเรกคอร์ดการตรวจสอบที่ขาดหายไปได้

ตอนนี้เปิดใช้งานการตรวจสอบ:

ALTER SERVER AUDIT SecurityAudit WITH (STATE = ON);

จากนั้น ให้สร้างข้อกําหนดการตรวจสอบเซิร์ฟเวอร์เพื่อบันทึกเหตุการณ์ระดับเซิร์ฟเวอร์:

CREATE SERVER AUDIT SPECIFICATION ServerAuditSpec
FOR SERVER AUDIT SecurityAudit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP)
WITH (STATE = ON);

สําหรับเหตุการณ์ระดับฐานข้อมูล ให้สร้างข้อกําหนดการตรวจสอบฐานข้อมูล:

USE MyDatabase;
GO

CREATE DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
FOR SERVER AUDIT SecurityAudit
ADD (SELECT, INSERT, UPDATE, DELETE ON dbo.SensitiveData BY public),
ADD (EXECUTE ON SCHEMA::dbo BY public),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP)
WITH (STATE = ON);

ข้อมูลจําเพาะนี้จะตรวจสอบการเข้าถึงข้อมูลทั้งหมดบน SensitiveData ตาราง การดําเนินการกระบวนงานที่เก็บไว้ และการเปลี่ยนแปลงการเป็นสมาชิกบทบาท

กําหนดค่าการตรวจสอบ Azure SQL

การตรวจสอบฐานข้อมูล Azure SQL ได้รับการกําหนดค่าที่ระดับเซิร์ฟเวอร์หรือฐานข้อมูล นโยบายระดับเซิร์ฟเวอร์ใช้กับฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์แบบลอจิคัล

คุณสามารถเปิดใช้งานการตรวจสอบในพอร์ทัล Azure หรือใช้ T-SQL:

-- Enable auditing to blob storage (configured in Azure portal)
ALTER DATABASE AUDIT SPECIFICATION AzureAuditSpec
ADD (SELECT, INSERT, UPDATE, DELETE ON DATABASE::MyDatabase BY public)
WITH (STATE = ON);

สําหรับการควบคุมที่ละเอียดยิ่งขึ้น ให้กําหนดค่าการตรวจสอบผ่าน Azure Policy หรือเทมเพลต ARM ต่อไปนี้คือตัวอย่างที่ระบุบัญชีพื้นที่เก็บข้อมูล ระยะเวลาการเก็บรักษา และกลุ่มการดําเนินการตรวจสอบ

{
  "properties": {
    "state": "Enabled",
    "storageEndpoint": "https://myauditlogs.blob.core.windows.net",
    "retentionDays": 90,
    "auditActionsAndGroups": [
      "SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP",
      "FAILED_DATABASE_AUTHENTICATION_GROUP",
      "BATCH_COMPLETED_GROUP"
    ]
  }
}

Note

การตรวจสอบ Azure SQL ไปยัง Log Analytics ช่วยให้สามารถคิวรีและการแจ้งเตือนที่มีประสิทธิภาพโดยใช้ Kusto Query Language (KQL) การผสานรวมนี้ช่วยลดความยุ่งยากในการตรวจสอบความปลอดภัยและการรายงานการปฏิบัติตามข้อกําหนด

เลือกการดําเนินการตรวจสอบ

เลือกการดําเนินการตรวจสอบตามข้อกําหนดด้านความปลอดภัยและการปฏิบัติตามข้อกําหนดของคุณ กลุ่มการดําเนินการทั่วไป ได้แก่

เหตุการณ์การรับรองความถูกต้อง:

  • SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP - เข้าสู่ระบบสําเร็จ
  • FAILED_DATABASE_AUTHENTICATION_GROUP - ความพยายามในการลงชื่อเข้าใช้ล้มเหลว

การเปลี่ยนแปลงสิทธิ์:

  • DATABASE_PERMISSION_CHANGE_GROUP - ให้ เพิกถอน ปฏิเสธการดําเนินงาน
  • DATABASE_ROLE_MEMBER_CHANGE_GROUP - การเปลี่ยนแปลงการเป็นสมาชิกบทบาท
  • DATABASE_PRINCIPAL_CHANGE_GROUP - การสร้างและแก้ไขผู้ใช้

การเข้าถึงข้อมูล:

  • BATCH_COMPLETED_GROUP - แบทช์ที่เสร็จสมบูรณ์ทั้งหมด (ปริมาณมาก)
  • SELECT บนอ็อบเจ็กต์เฉพาะ - การตรวจสอบการเข้าถึงการอ่านแบบกําหนดเป้าหมาย
  • INSERT, , UPDATEบน DELETE ออบเจ็กต์เฉพาะ - การติดตามการแก้ไขข้อมูล

การเปลี่ยนแปลงสคีมา:

  • SCHEMA_OBJECT_CHANGE_GROUP - การแก้ไขตารางและวัตถุ
  • DATABASE_OBJECT_CHANGE_GROUP - ใบแจ้งยอด DDL

สำคัญ

เริ่มต้นด้วยชุดการดําเนินการตรวจสอบที่มุ่งเน้นมากกว่าการรวบรวมทุกอย่าง การตรวจสอบปริมาณมากส่งผลต่อประสิทธิภาพและสร้างบันทึกที่ยากต่อการวิเคราะห์

สืบค้นและวิเคราะห์บันทึกการตรวจสอบ

สําหรับการตรวจสอบตามไฟล์ SQL Server ให้ใช้ฟังก์ชันเพื่อ fn_get_audit_file สอบถามบันทึกของคุณ:

SELECT 
    event_time,
    action_id,
    succeeded,
    session_server_principal_name AS UserName,
    database_name,
    object_name,
    statement
FROM fn_get_audit_file('C:\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time > DATEADD(day, -7, GETUTCDATE())
ORDER BY event_time DESC;

หากคุณกําลังใช้การตรวจสอบ Azure SQL กับ Log Analytics คุณสามารถคิวรีโดยใช้ KQL:

AzureDiagnostics
| where Category == "SQLSecurityAuditEvents"
| where TimeGenerated > ago(7d)
| where action_name_s == "SELECT"
| summarize count() by client_ip_s, server_principal_name_s
| order by count_ desc

การค้นหานี้จะระบุว่าผู้ใช้และที่อยู่ IP ใดสร้างการค้นหา SELECT มากที่สุดในช่วงสัปดาห์ที่ผ่านมา ซึ่งจะช่วยระบุรูปแบบการเข้าถึงที่ผิดปกติ

ใช้การเก็บรักษาและการป้องกันการตรวจสอบ

บันทึกการตรวจสอบของคุณต้องการการป้องกันจากการปลอมแปลง และคุณต้องเก็บรักษาไว้ตามข้อกําหนดการปฏิบัติตามข้อกําหนด

สําหรับ SQL Server ให้กําหนดค่าที่เก็บข้อมูลที่ไม่เปลี่ยนแปลงสําหรับไฟล์การตรวจสอบ และใช้สิทธิ์ของระบบไฟล์ Windows เพื่อป้องกันการลบ สําหรับ Azure SQL ให้กําหนดค่าที่เก็บข้อมูลด้วยที่เก็บข้อมูล Blob ที่ไม่เปลี่ยนแปลง และตั้งค่านโยบายการเก็บข้อมูลในการจัดการวงจรชีวิตที่เก็บข้อมูล Azure

สำคัญ

จัดเก็บบันทึกการตรวจสอบแยกต่างหากจากฐานข้อมูลที่ตรวจสอบ สิ่งนี้ทําให้มั่นใจได้ว่าแม้ว่าผู้โจมตีจะบุกรุกฐานข้อมูล แต่ก็ไม่สามารถยุ่งเกี่ยวกับเส้นทางการตรวจสอบได้

สําหรับสถานการณ์การปฏิบัติตามข้อกําหนด ให้พิจารณาแนวทางปฏิบัติในการเก็บรักษาข้อมูลเหล่านี้:

  • กําหนดระยะเวลาการเก็บรักษาตามข้อกําหนดด้านกฎระเบียบ (โดยปกติคือเจ็ดปีสําหรับข้อมูลทางการเงิน)
  • ใช้ที่เก็บข้อมูลที่ไม่เปลี่ยนแปลงเพื่อป้องกันการลบบันทึก
  • ใช้การเก็บถาวรบันทึกไปยังห้องเย็นเพื่อการจัดการต้นทุน
  • สร้างกระบวนการสําหรับการตรวจสอบบันทึกการตรวจสอบและการแจ้งเตือน

การตรวจสอบข้อมูลการตรวจสอบเป็นประจําจะช่วยให้คุณระบุปัญหาด้านความปลอดภัยก่อนที่จะกลายเป็นเหตุการณ์ สร้างการแจ้งเตือนสําหรับการพยายามลงชื่อเข้าใช้ที่ล้มเหลว การเปลี่ยนแปลงสิทธิ์นอกกรอบเวลาการบํารุงรักษา และรูปแบบการเข้าถึงข้อมูลที่ผิดปกติ