ดําเนินการตรวจสอบ
การตรวจสอบช่วยให้มองเห็นกิจกรรมฐานข้อมูล ช่วยให้คุณตรวจจับภัยคุกคามด้านความปลอดภัย ติดตามการปฏิบัติตามข้อกําหนด และตรวจสอบเหตุการณ์ การบันทึกว่าใครเข้าถึงข้อมูลใดและเมื่อใด การตรวจสอบจะสร้างเส้นทางความรับผิดชอบที่สนับสนุนทั้งการตรวจสอบความปลอดภัยและข้อกําหนดด้านกฎระเบียบ
ฐานข้อมูล SQL Server, Azure SQL และ SQL ใน Microsoft Fabric มีความสามารถในการตรวจสอบในตัวที่บันทึกเหตุการณ์ฐานข้อมูลโดยไม่ต้องเปลี่ยนแปลงแอปพลิเคชัน การทําความเข้าใจวิธีการกําหนดค่าและจัดการการตรวจสอบจะช่วยให้คุณรักษาการกํากับดูแลสภาพแวดล้อมฐานข้อมูลของคุณอย่างเหมาะสม
ทําความเข้าใจตัวเลือกการตรวจสอบ
การตรวจสอบจะบันทึกเหตุการณ์ฐานข้อมูลและเขียนลงในบันทึกการตรวจสอบ เหตุการณ์ที่คุณตรวจสอบ ตําแหน่งที่คุณจัดเก็บบันทึก และวิธีวิเคราะห์จะขึ้นอยู่กับข้อกําหนดด้านความปลอดภัยและโครงสร้างพื้นฐานของคุณ
การตรวจสอบ 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
สำคัญ
จัดเก็บบันทึกการตรวจสอบแยกต่างหากจากฐานข้อมูลที่ตรวจสอบ สิ่งนี้ทําให้มั่นใจได้ว่าแม้ว่าผู้โจมตีจะบุกรุกฐานข้อมูล แต่ก็ไม่สามารถยุ่งเกี่ยวกับเส้นทางการตรวจสอบได้
สําหรับสถานการณ์การปฏิบัติตามข้อกําหนด ให้พิจารณาแนวทางปฏิบัติในการเก็บรักษาข้อมูลเหล่านี้:
- กําหนดระยะเวลาการเก็บรักษาตามข้อกําหนดด้านกฎระเบียบ (โดยปกติคือเจ็ดปีสําหรับข้อมูลทางการเงิน)
- ใช้ที่เก็บข้อมูลที่ไม่เปลี่ยนแปลงเพื่อป้องกันการลบบันทึก
- ใช้การเก็บถาวรบันทึกไปยังห้องเย็นเพื่อการจัดการต้นทุน
- สร้างกระบวนการสําหรับการตรวจสอบบันทึกการตรวจสอบและการแจ้งเตือน
การตรวจสอบข้อมูลการตรวจสอบเป็นประจําจะช่วยให้คุณระบุปัญหาด้านความปลอดภัยก่อนที่จะกลายเป็นเหตุการณ์ สร้างการแจ้งเตือนสําหรับการพยายามลงชื่อเข้าใช้ที่ล้มเหลว การเปลี่ยนแปลงสิทธิ์นอกกรอบเวลาการบํารุงรักษา และรูปแบบการเข้าถึงข้อมูลที่ผิดปกติ