تعقب نشاط قاعدة البيانات باستخدام سجلات التدقيق في قاعدة بيانات Azure ل MySQL - الخادم المرن

ينطبق على: قاعدة بيانات Azure لـMySQL - خادم مرن

يوفر خادم Azure Database for MySQL المرن للمستخدمين القدرة على تكوين سجلات التدقيق. يُمكن استخدام سجلات التدقيق لتعقب نشاط مستوى قاعدة البيانات، بما في ذلك أحداث الاتصال والمشرف وDDL وDML. تُستخدم هذه الأنواع من السجلات بشكل شائع لأغراض التوافق.

تكوين سجلات التدقيق

هام

يوصى فقط بتسجيل أنواع الأحداث والمستخدمين المطلوبين لأغراض التدقيق الخاصة بك لضمان عدم تأثر أداء الخادم بشكل كبير وجمع الحد الأدنى من البيانات.

بشكل افتراضي، يتم تعطيل سـجلات التدقيق. لتمكينها، عين⁩ معلمة الخادم ⁧audit_log_enabled إلى ⁧⁩ON⁧⁩. يمكن تكوين هذا باستخدام مدخل Azure أو Azure CLI.

تتضمن المعلمات الأخرى التي يُمكنك ضبطها للتحكم في سلوك تسجيل التدقيق ما يلي:

  • audit_log_events: يتحكم في الأحداث التي سيتم تسجيلها. اتظر الجدول أدناه لأحداث تدقيق محددة.
  • audit_log_include_users: سيتم تضمين مستخدمي MySQL للتسجيل. القيمة الافتراضية لهذه المعلمة فارغة، والتي ستشمل جميع المستخدمين للتسجيل. لهذا أولوية أعلى على audit_log_exclude_users. الحد الأقصى لطول المعلمة هو 512 حرفًا. على سبيل المثال، تتضمن قيمة dev* حرف البدل جميع المستخدمين الذين لديهم إدخالات تبدأ بكلمة أساسية dev مثل "dev1،dev_user،dev_2". مثال آخر لإدخال حرف البدل لتضمين المستخدم في *dev هذا المثال، يتم تضمين جميع المستخدمين الذين ينتهيون بالقيمة "dev" مثل "stage_dev،prod_dev،user_dev" في إدخالات سجل التدقيق. بالإضافة إلى ذلك، يسمح باستخدام علامة استفهام (?) كحرف بدل في الأنماط.
  • audit_log_exclude_users: سيتم استبعاد مستخدمي MySQL من التسجيل. الحد الأقصى لطول المعلمة هو 512 حرفا. يتم أيضا قبول إدخالات أحرف البدل للمستخدم لاستبعاد المستخدمين في سجلات التدقيق. على سبيل المثال، تستبعد قيمة stage* حرف البدل لجميع المستخدمين الذين لديهم إدخالات تبدأ بالكلمة الأساسية stage مثل "stage1,stage_user,stage_2". مثال آخر لإدخال حرف البدل لاستبعاد المستخدم في *com هذا المثال، سيتم استبعاد جميع المستخدمين الذين ينتهيون بقيمة com من إدخالات سجل التدقيق. بالإضافة إلى ذلك، يسمح باستخدام علامة استفهام (?) كحرف بدل في الأنماط.

إشعار

audit_log_include_usersلهذا أولوية أعلى على audit_log_exclude_users. على سبيل المثال، في الحالة audit_log_include_users = demouser وaudit_log_exclude_users = demouser، سيتم تضمين المستخدم في سجلات التدقيق لأن audit_log_include_users له أولوية أعلى.

الحدث الوصف
CONNECTION - بدء الاتصال
- إنهاء الاتصال
CONNECTION_V2 - بدء الاتصال (رمز خطأ محاولة ناجحة أو غير ناجحة)
- إنهاء الاتصال
DML_SELECT تحديد الاستعلامات
DML_NONSELECT إدراج/حذف/تحديث الاستعلامات
DML DML = DML_SELECT + DML_NONSELECT
DDL استعلامات مثل "DROP DATABASE"
DCL استعلامات مثل "GRANT PERMISSION"
ADMIN استعلامات مثل "SHOW STATUS"
GENERAL الكل في DML_SELECT DML_NONSELECT وDML وDDL وDCL والمسؤول
TABLE_ACCESS - عبارات قراءة الجدول، مثل SELECT أو INSERT INTO ... SELECT
- عبارات حذف الجدول، مثل DELETE أو TRUNCATE TABLE
-عبارات إدراج جدول مثل INSERT أو REPLACE
-عبارات تحديث الجدول مثل UPDATE

الوصول إلى سجلات التدقيق

يتم دمج سجلات التدقيق باستخدام إعدادات تشخيص Azure Monitor. بمجرد تمكين سجلات التدقيق على الخادم المرن، يمكنك إرسالها إلى سجلات Azure Monitor أو Azure Event Hubs أو Azure Storage. لمعرفة المزيد حول إعدادات التشخيص، راجع وثائق سجلات التشخيص. لمعرفة المزيد حول كيفية تمكين إعدادات التشخيص في مدخل Microsoft Azure، راجع مقالة مدخل سجل التدقيق.

إشعار

لا يتم دعم حسابات التخزين المتميزة إذا قمت بإرسال السجلات إلى تخزين Azure عبر التشخيص والإعدادات.

تصف المقاطع التالية إخراج سجلات التدقيق MySQL استنادًا إلى نوع الحدث. اعتمادا على أسلوب الإخراج، قد تختلف الحقول المضمنة وترتيب ظهورها.

الاتصال

الخاصية الوصف
TenantId معرف المستأجر
SourceSystem Azure
TimeGenerated [UTC] الطابع الزمني عندما تم تسجيل السجل في UTC
Type نوع الـسجل. دائم AzureDiagnostics
SubscriptionId معرّف فريد للاشتراك الذي ينتمي إليه الخادم
ResourceGroup اسم مجموعة الموارد التي ينتمي إليها الخادم
ResourceProvider اسم موفر المورد. دائم MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI للمورد
Resource اسم الخادم في الأحرف الكبيرة
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s اسم الـخادم
event_class_s connection_log
event_subclass_s CONNECT، ، DISCONNECTCHANGE USER
connection_id_d معرف اتصال فريد تم إنشاؤه بواسطة MySQL
host_s فارغ
ip_s عنوان IP للعميل المتصل بـ MySQL
user_s اسم المستخدم المنفذ الاستعلام
db_s اسم قاعدة البيانات المتصلة بـ
\_ResourceId URI للمورد
status_d الاتصالإدخال رمز الخطأ لحدث CONNECTIONS_V2.

عام

ينطبق المخطط أدناه على أنواع أحداث عام DML_SELECT DML_NONSELECT وDML وDDL وDCL و ADMIN.

إشعار

بالنسبة إلى sql_text_s، سوف يتم اقتطاع السجل إذا تجاوز 2048 حرفا.

الخاصية الوصف
TenantId معرف المستأجر
SourceSystem Azure
TimeGenerated [UTC] الطابع الزمني عندما تم تسجيل السجل في UTC
Type نوع الـسجل. دائم AzureDiagnostics
SubscriptionId معرّف فريد للاشتراك الذي ينتمي إليه الخادم
ResourceGroup اسم مجموعة الموارد التي ينتمي إليها الخادم
ResourceProvider اسم موفر المورد. دائم MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI للمورد
Resource اسم الخادم في الأحرف الكبيرة
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s اسم الـخادم
event_class_s general_log
event_subclass_s LOG, ERROR, RESULT (مُتاحة فقط لـ MySQL 5.6)
event_time وقت بدء الاستعلام في الطابع الزمني UTC
error_code_d رمز الخطأ في حالة فشل الاستعلام. 0 يعني عدم وجود خطأ
thread_id_d معرف مؤشر الترابط المنفذ للاستعلام
host_s فارغ
ip_s عنوان IP للعميل المتصل بـ MySQL
user_s اسم المستخدم المنفذ الاستعلام
sql_text_s نص استعلام كامل
\_ResourceId URI للمورد

الوصول للجدول

إشعار

بالنسبة إلى sql_text_s، سوف يتم اقتطاع السجل إذا تجاوز 2048 حرفا.

الخاصية الوصف
TenantId معرف المستأجر
SourceSystem Azure
TimeGenerated [UTC] الطابع الزمني عندما تم تسجيل السجل في UTC
Type نوع الـسجل. دائم AzureDiagnostics
SubscriptionId معرّف فريد للاشتراك الذي ينتمي إليه الخادم
ResourceGroup اسم مجموعة الموارد التي ينتمي إليها الخادم
ResourceProvider اسم موفر المورد. دائم MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI للمورد
Resource اسم الخادم في الأحرف الكبيرة
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s اسم الـخادم
event_class_s table_access_log
event_subclass_s READ, INSERT, UPDATE, أو DELETE
connection_id_d معرف اتصال فريد تم إنشاؤه بواسطة MySQL
db_s اسم قاعدة البيانات التي تم الوصول لها
table_s اسم الجدول الذي تم الوصول له
sql_text_s نص استعلام كامل
\_ResourceId URI للمورد

تحليل السجلات في Azure Monitor Logs

بمجرد نقل سجلات التدقيق إلى سجلات Azure Monitor من خلال سجلات التشخيص، يمكنك إجراء مزيد من التحليل للأحداث التي تم تدقيقها. فيما يلي بعض الاستعلامات النموذجية لمساعدتك على البدء. تأكد من التحديث أدناه باسم الخادم الخاص بك.

  • أحداث List GENERAL على خادم معين

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • سرد الأحداث CONNECTION_V2 على خادم معين، status_d يشير العمود إلى رمز خطأ اتصال العميل الذي يواجهه تطبيق العميل أثناء الاتصال.

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d
    | order by TimeGenerated asc nulls last
    
  • أحداث List CONNECTION على خادم معين

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • تلخيص الأحداث المدققة على خادم معين

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by event_class_s, event_subclass_s, user_s, ip_s
    
  • Graph توزيع نوع حدث التدقيق على خادم معين

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by Resource, bin(TimeGenerated, 5m)
    | render timechart
    
  • سرد الأحداث المدققة عبر جميع مثيلات الخادم المرن ل Azure Database for MySQL مع تمكين سجلات التشخيص لسجلات التدقيق

    AzureDiagnostics
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    

الخطوات التالية