שימוש בבקרת גישה למסד נתונים של MySQL

הפלאגין Cloud SQL for MySQL Audit מאפשר לתעד את הפעילות במסד הנתונים ולעקוב אחרי פעולות של משתמשים במכונות שלכם. ניהול יומני הביקורת האלה עוזר לכם לעמוד בדרישות הרגולטוריות ולזהות גישה לא מורשית.

במסמך הזה, אדמינים ומבקרים נקראים ביחד משתמשי ביקורת. לסקירה כללית, קראו את המאמר ביקורת של מסדי נתונים ב-MySQL. למידע נוסף על פלאגינים של MySQL, קראו את המאמר טעינת פלאגינים של MySQL.

לפני שמתחילים

יומני הביקורת Data Access

להפעיל ולהגדיר יומני ביקורת של גישה לנתונים. הגדרת יומני ביקורת של גישה לנתונים

ההרשאות שנדרשות למשתמשים עם הרשאת ביקורת

כדי להריץ את הפרוצדורות המאוחסנות של הביקורת, צריך הרשאות EXECUTE. אם אדמין צריך לשנות את הרשאות הגישה של מבקר לפרוצדורות המאוחסנות של הביקורת, הוא צריך להשתמש בפקודה GRANT או REVOKE בלקוח mysql. למידע נוסף על הרשאות משתמש, קראו את המאמר הרשאות משתמש ב-MySQL. לדוגמה, אם אדמין רוצה לתת למשתמש בשם user גישה לניהול כללי הביקורת, הוא יכול לתת את ההרשאות באמצעות ההצהרה הבאה:

CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';

אם האדמין ירצה לבטל את הגישה של המבקר, הוא יוכל לעשות את זה באמצעות ההצהרה הבאה:

REVOKE ALL ON PROCEDURE mysql.cloudsql_list_audit_rule FROM 'user'@'%';

כברירת מחדל, משתמשים שנוצרו באמצעות Cloud SQL (חוץ ממשתמשי IAM) הם אדמינים שיש להם את כל ההרשאות חוץ מ-FILE ו-SUPER, כולל כל ההרשאות לפרוצדורות המאוחסנות של הביקורת. כברירת מחדל, למשתמשי מסד נתונים ב-IAM אין הרשאות.

הפעלת הפלאגין Cloud SQL ל-MySQL Audit

הפלאגין Cloud SQL ל-MySQL Audit (cloudsql_mysql_audit) שולט בהתנהגות הביקורת של מכונה נתונה של מסד נתונים. כדי להשתמש בפלאגין, צריך קודם להפעיל אותו במכונה של Cloud SQL.

כדי להפעיל את הפלאגין של cloudsql_mysql_audit, אפשר להשתמש באחת מהאפשרויות הבאות:

  • --cloudsql_mysql_audit=ON

    מורה לשרת להפעיל את הפלאגין. אם הפלאגין לא מופעל, השרת פועל כשהפלאגין מושבת.

  • --cloudsql_mysql_audit=FORCE

    השרת מפעיל את הפלאגין, אבל אם ההפעלה נכשלת, השרת לא מתחיל לפעול. במילים אחרות, האפשרות הזו מאלצת את השרת לפעול כשהפלאגין מופעל, או לא לפעול בכלל.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    כמו FORCE, אבל גם מונע את פריקת הפלאגין בזמן הריצה. אם משתמש מנסה להסיר את הפלאגין באמצעות UNINSTALL PLUGIN, מתרחשת שגיאה.

מצבי ההפעלה של הפלאגינים מופיעים בעמודה PLUGIN_STATUS בטבלה INFORMATION_SCHEMA.PLUGINS.

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. פותחים את המכונה ולוחצים על Edit.
  3. גוללים למטה לקטע דגלים.
  4. כדי להגדיר דגל שלא הוגדר במכונה בעבר, לוחצים על Add flag, בוחרים את cloudsql_mysql_audit מהתפריט הנפתח ומגדירים את הערך שלו ל-ON.
  5. לוחצים על Save כדי לשמור את השינויים.
  6. מאשרים את השינויים בקטע סימונים בדף סקירה כללית.

gcloud

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: שם המכונה שבה מגדירים את הדגל.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

הפקודה הזו מחליפה את כל הדגלים לניהול מסד הנתונים שהוגדרו קודם. כדי לשמור אותם ולהוסיף דגלים חדשים, צריך לכלול את הערכים של כל הדגלים שרוצים להגדיר במכונה. כל דגל שלא נכלל באופן ספציפי מוגדר לערך ברירת המחדל שלו. בדגלים שלא מקבלים ערך, מציינים את שם הדגל ואחריו סימן שוויון (=).

‫REST v1beta4

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

REST v1

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

הגדרות של Cloud SQL ל-MySQL Audit Plugin

אתם יכולים לשנות את ההתנהגות של הפלאגין לביקורת של Cloud SQL ל-MySQL באמצעות הדגלים הבאים. אפשר לשנות את כל הדגלים בלי להפעיל מחדש את מסד הנתונים. במאמר הגדרת דגלים לניהול מסדי נתונים מוסבר איך לנהל את הדגלים.

  • cloudsql_mysql_audit_data_masking_regex

    ביטוי רגולרי שמשמש להסתרת נתונים ותואם לביטויים רגולריים תואמי Perl (PCRE).

    כברירת מחדל, ביומן הביקורת שנוצר, הסיסמאות של המשתמשים (<psw>) מוחלפות במסכת סיסמה של ***.

    הביטוי הרגולרי חל רק על הצהרות עם סוג פקודה שצוין באמצעות cloudsql_mysql_audit_data_masking_cmds. כשמשתמשים ב-gcloud, צריך להשתמש בקובץ דגל כדי להגדיר ערכים עם תווים מיוחדים מורכבים.

    ערכי ברירת המחדל של הדגל הזה:

    
    identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/|
    \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[
    '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)
    (?<!\\)['|"]
    
    

    ריכזנו כאן כמה דוגמאות.

    • בלי cloudsql_mysql_audit_data_masking_regex, רשומה ביומן הביקורת שמתארת פקודה ליצירת משתמש תיראה כך:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified
      by 'pw'"}
    • עם ערך ברירת המחדל cloudsql_mysql_audit_data_masking_regex, אותו יומן ביקורת ישתנה ל:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
    • אם מגדירים את cloudsql_mysql_audit_data_masking_regex לערך (?<psw>.*), ‏Cloud SQL יכול לסנן את כל תוכן השאילתה.

      {..."cmd":"create_user","query":"***"}
  • cloudsql_mysql_audit_data_masking_cmds

    רשימה מופרדת בפסיקים של פקודות שעליהן חל הביטוי הרגולרי להסתרת נתונים (cloudsql_mysql_audit_data_masking_regex). כדי להפסיק את הסינון, מגדירים מחרוזת ריקה (""). כשמשתמשים ב-gcloud, צריך להשתמש בקובץ דגל כדי להגדיר רשימה מופרדת בפסיקים. ערך ברירת המחדל כולל פקודות MySQL עם סעיף הסיסמה הבא:

    create_user,alter_user,grant,update
  • cloudsql_mysql_audit_max_query_length

    המדיניות קובעת את האורך המקסימלי של השאילתה שתישמר ביומן הביקורת. אם אתם לא צריכים לראות את פרטי השאילתה, אתם יכולים להשתמש ב-0, וכך השאילתה לא תתועד ביומן הביקורת. כך אפשר לחסוך מקום אחסון ביומן ולהוזיל את העלות. ‫-1 פירושו שאין הגבלה. ברירת המחדל היא -1.

  • cloudsql_mysql_audit_log_write_period

    תקופת הכתיבה של היומן, שבה ה-writer thread כותב את תוכן מאגר הנתונים הזמניים בדיסק אחרי שהגיע למספר אלפיות השנייה שהגדרתם לאפשרות הדגל הזו, או כשמאגר הנתונים הזמניים מלא. אם מגדירים את האפשרות הזו ל-0, השרשור של המשתמש נאלץ להמתין להודעה מהשרשור של הכותב על כך שהכתיבה הושלמה. ערך ברירת המחדל הוא 500 (אלפיות השנייה).

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. פותחים את המכונה ולוחצים על Edit.
  3. גוללים למטה לקטע דגלים.
  4. כדי להגדיר דגל שלא הוגדר בעבר במכונה, לוחצים על Add flag, בוחרים דגל לניהול מסד נתונים מהרשימה שלמעלה בתפריט הנפתח ומגדירים את הערך שלו.
  5. לוחצים על Save כדי לשמור את השינויים.
  6. מאשרים את השינויים בקטע סימונים בדף סקירה כללית.

gcloud

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: שם המכונה שבה מגדירים את הדגל.
  • FLAG_NAME: השם של דגל ההגדרה.
  • ‫FLAG_VALUE: הערך שבו משתמשים בדגל.

        gcloud sql instances patch INSTANCE_NAME /
                   --database-flags FLAG_NAME=FLAG_VALUE
    

‫REST v1beta4

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

REST v1

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

הגדרת ביקורת של מסד נתונים

ניהול כללי ביקורת

ב-Cloud SQL נעשה שימוש בקבוצה של פרוצדורות מאוחסנות כדי לנהל את כללי הביקורת של הפלאגין Cloud SQL ל-MySQL Audit. יש ארבע פרוצדורות מאוחסנות שאפשר להשתמש בהן כדי ליצור, להציג, לעדכן ולמחוק כללי ביקורת.

כל פרוצדורה מאוחסנת מחזירה שני משתנים: @outval ו-@outmsg. המשתנים האלה מציינים את קוד הסטטוס ואת הודעת השגיאה של הפרוצדורה המאוחסנת, בהתאמה. אפשר להשתמש בכוכבית (*) כתו כללי לחיפוש של שמות משתמשים, מארחים, מסדי נתונים וטבלאות. אפשר להשתמש בכוכבית כסיומת, כתחילית או גם וגם. בנוסף, אפשר להשתמש בתו הכללי לחיפוש % רק למארחים. אפשר להשתמש בסימן הטעמה משנית (`) כדי לציין שצריך להשתמש במחרוזת באופן מילולי. לדוגמה, `ta*ble` תואם באופן מילולי.

כדי שהשינויים החדשים ייכנסו לתוקף, צריך להריץ את הפרוצדורות המאוחסנות עם הפרמטר reload_mode=1 או לקרוא ל-mysql.cloudsql_reload_audit_rule(1).

יצירת כללי ביקורת

אתם יכולים להשתמש ב-mysql.cloudsql_create_audit_rule כדי ליצור כלל ביקורת חדש.

כדי ליצור את כלל הביקורת ולטעון אותו מחדש בקריאה אחת, משתמשים בהצהרה הבאה:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;

כדי ליצור את הכלל ולטעון אותו מחדש בקריאה נפרדת, משתמשים בהצהרה הבאה:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

הפקודה הקודמת מאפשרת ליצור כמה כללים ואז לטעון מחדש את כל השינויים בו-זמנית.

בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.

פרמטרים של קלט
שם סוג תיאור דוגמה
user@host או user@ip מחרוזת רשימה מופרדת בפסיקים של משתמשי מסד הנתונים שצריך לבדוק. צריך להשתמש בפורמט user@host או user@ip.

‫user1@localhost,
user1@*,
user1@%,
user@ip
db מחרוזת רשימה מופרדת בפסיקים של מסדי נתונים לביקורת. db1,db2,db3*
obj מחרוזת רשימה מופרדת בפסיקים של אובייקטים במסד הנתונים שצריך לבדוק. table1,table2,table3*
ops מחרוזת רשימה מופרדת בפסיקים של פעולות במסד הנתונים שצריך לבדוק. select,delete,insert
op_result מחרוזת מבצעים ביקורת על פעולות שהצליחו (S), פעולות שנכשלו (U) או גם פעולות שהצליחו וגם פעולות שנכשלו (B), או יוצרים כלל להחרגה (E).

S, U, B אוE
reload_mode מספר שלם 0 כדי לא לטעון מחדש את הכלל ו-1 כדי לטעון מחדש. 0 או 1
פרמטרים של פלט
שם סוג תיאור דוגמה
@outval int קוד הסטטוס של התהליך המאוחסן. ‫0 אם הפעולה הצליחה ו-1 אם היא נכשלה.
@outmsg מחרוזת הודעת השגיאה של התהליך המאוחסן.

אלה המגבלות של כללי הביקורת:

מגבלות
אורך של user, db, obj, ו-ops. הגודל המקסימלי הוא 2,048 תווים.
מספר השילובים של user,‏ db,‏ obj ו-ops. אפשר להוסיף עד 1,000 שילובים. לדוגמה, כלל ביקורת שבודק את user1,user2, db1, db2, table1,table2 ו-select,delete יוצר 2 x 2 x 2 x 2 = 16 שילובים.

הצגת רשימה של כללי ביקורת

מבקרים יכולים להשתמש ב-mysql.cloudsql_list_audit_rule כדי להציג רשימה של כללי ביקורת קיימים.

כדי להציג את כללי הביקורת 1 ו-2, משתמשים בפקודות הבאות:

CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;

כדי להציג את כל כללי הביקורת:

CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;

בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.

פרמטרים של קלט
שם סוג תיאור דוגמה
rule_id מחרוזת רשימה מופרדת בפסיקים של מזהי הכללים שרוצים להציג. 1,2,3
פרמטרים של פלט
שם סוג תיאור דוגמה
@outval int קוד הסטטוס של התהליך המאוחסן. ‫0 אם הפעולה הצליחה ו-1 אם היא נכשלה.
@outmsg מחרוזת הודעת השגיאה של התהליך המאוחסן.

עדכון כללי הביקורת

אפשר להשתמש ב-mysql.cloudsql_update_audit_rule כדי לעדכן כלל ביקורת קיים.

כדי לעדכן את כלל הביקורת ולטעון אותו מחדש בקריאה אחת, משתמשים בהצהרה הבאה:

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;

יכול להיות שתרצו לעדכן כמה כללי ביקורת בסשן אחד לפני שתטענו מחדש את הכללים. אתם יכולים להשתמש בפרוצדורה המאוחסנת הבאה כדי לעדכן את הכללים בשלב אחד, ואז לטעון מחדש את הכללים האלה בשלב מאוחר יותר.

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.

פרמטרים של קלט
שם סוג תיאור דוגמה
rule_id int המזהה של הכלל שרוצים לעדכן. 5
user@host מחרוזת רשימה מופרדת בפסיקים של משתמשי מסד הנתונים שצריך לבדוק. צריך להשתמש בפורמט user@host.

user1@localhost,user1@*
user1@%
db מחרוזת רשימה מופרדת בפסיקים של מסדי נתונים לביקורת. db1,db2,db3*
obj מחרוזת רשימה מופרדת בפסיקים של אובייקטים במסד הנתונים שצריך לבדוק. table1,table2,table3*
ops מחרוזת רשימה מופרדת בפסיקים של פעולות במסד הנתונים שצריך לבדוק. SELECT,DELETE,INSERT
op_result מחרוזת מבצעים ביקורת על פעולות שהצליחו (S), פעולות שנכשלו (U) או גם פעולות שהצליחו וגם פעולות שנכשלו (B), או יוצרים כלל להחרגה (E).

S, U, B אוE
reload_mode מספר שלם 0 כדי לא לטעון מחדש את הכלל ו-1 כדי לטעון מחדש. 0 או 1
פרמטרים של פלט
שם סוג תיאור דוגמה
@outval int קוד הסטטוס של התהליך המאוחסן. ‫0 אם הפעולה הצליחה ו-1 אם היא נכשלה.
@outmsg מחרוזת הודעת השגיאה של התהליך המאוחסן.

אלה המגבלות של כללי הביקורת:

מגבלות
אורך של user, db, obj ו-ops. הגודל המקסימלי הוא 2,048 תווים.
מספר השילובים של user,‏ db,‏ obj ו-ops. אפשר להוסיף עד 1,000 שילובים. לדוגמה, כלל ביקורת שבודק את user1,user2, db1, db2, table1,table2 ו-select,delete יוצר 2 x 2 x 2 x 2 = 16 שילובים.

מחיקת כללי ביקורת

אתם יכולים להשתמש ב-mysql.cloudsql_delete_audit_rule כדי למחוק כלל ביקורת קיים.

כדי למחוק את כלל הביקורת ולטעון אותו מחדש בקריאה אחת, משתמשים בהצהרה הבאה:

CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;

כדי למחוק את הכלל ולטעון אותו מחדש בקריאה נפרדת, משתמשים בהצהרה הבאה:

CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);

הפקודה הקודמת מאפשרת למחוק כמה כללים ואז לטעון מחדש את כל השינויים בו-זמנית.

בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.

פרמטרים של קלט
שם סוג תיאור דוגמה
rule_id מחרוזת רשימה מופרדת בפסיקים של מזהי כללים להסרה. 1,2,3
reload_mode מספר שלם 0 כדי לא לטעון מחדש את הכלל ו-1 כדי לטעון מחדש. 0 או 1
פרמטרים של פלט
שם סוג תיאור דוגמה
@outval int קוד הסטטוס של התהליך המאוחסן. ‫0 אם הפעולה הצליחה ו-1 אם היא נכשלה.
@outmsg מחרוזת הודעת השגיאה של התהליך המאוחסן.

קבוצות של פעולות

הפלאגין Cloud SQL for MySQL Audit תומך בשימוש בקבוצות של פעולות בהגדרות של כללים, כדי לבצע ביקורת על אוספים של פעילויות. כדי לפשט את היצירה של כללי ביקורת, אתם יכולים להשתמש בקבוצות הפעולות הבאות.

קבוצות של פעולות הפעולות שכלולות
dql select
dml delete,delete_multi, insert, insert_select, load, replace, replace_select, truncate, update, update_multi,
ddl alter_db, alter_event, alter_function, alter_procedure, alter_table, alter_user, create_db, create_event, create_function, create_index, create_procedure, create_table, create_trigger, create_user, create_udf, create_view, drop_db, drop_event, drop_function, drop_index, drop_procedure, drop_table, drop_trigger, drop_user, drop_view, rename_table, rename_user
dcl ‫grant, revoke, revoke_all
show show_binlog_events, show_create_func, show_create_proc, show_procedure_code, show_create_event, show_create_trigger, show_events, show_function_code, show_grants, show_relaylog_events, show_triggers,
call call_procedure

צפייה ביומני ביקורת של מסדי נתונים ב-Cloud SQL

צפייה ברשומות של יומן הביקורת של מסד הנתונים ב-Cloud Logging

כדי לצפות ביומני הביקורת של מסד הנתונים, קודם צריך לוודא שהפעלתם את יומני הביקורת של הגישה לנתונים בפרויקט. יומני הביקורת של MySQL שנוצרים במכונה מסוימת נשלחים ל-Cloud Logging בתור יומני ביקורת של גישה לנתונים. אפשר לראות את יומני הביקורת שנוצרו במסד הנתונים של MySQL בדף Logs Explorer.

ב-Logs Explorer, אתם יכולים להציג את יומני הביקורת של MySQL באמצעות השאילתה הבאה, כדי להציג את כל יומני הביקורת של מסד הנתונים של MySQL בפרויקט נתון ב-Cloud SQL.

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שרוצים למצוא את יומני הביקורת שלו.
    resource.type="cloudsql_database"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
    protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"

אפשר גם לבחור את מסנן היומנים cloudaudit.googleapis.com/data_access.

הפורמט של יומן הביקורת

יומן ביקורת כולל את השדות הבאים.

שם השדה תיאור
msgType מחרוזת שמייצגת את סוג ההודעה ביומן הביקורת.הערך היחיד של msgType הוא activity.
status סטטוס הפעולה, success או unsuccessful.
date חותמת זמן שמציינת מתי נוצר אירוע הביקורת.
threadId המזהה של השרשור ב-MySQL.
queryId המזהה של שאילתת MySQL.
user מחרוזת שמייצגת את שם המשתמש שנשלח על ידי הלקוח. This might differ from the privUser value.
privUser מחרוזת שמייצגת את המשתמש שהשרת אימת את הלקוח בתורו. זהו שם המשתמש שבו השרת משתמש לבדיקת הרשאות. הוא עשוי להיות שונה מהערך של המשתמש.
gcpIamAccount מחרוזת שמייצגת את חשבון ה-IAM או את חשבון השירות.
ip מחרוזת שמייצגת את כתובת ה-IP של הלקוח.
host מחרוזת שמייצגת את שם המארח של הלקוח.
errCode קוד השגיאה של MySQL לפעולה שנכשלה. אפשר לעיין בהפניה להודעות שגיאה בשרת MySQL.
cmd מחרוזת שמציינת את הצהרת ה-SQL (סוג הפעולה) שבה צריך להשתמש. לדוגמה, INSERT, UPDATE או DELETE.
objects אובייקטי הביקורת. בדרך כלל טבלה. השדה הזה כולל את הפרטים הבאים על האובייקט:

db מחרוזת שמייצגת את שם ברירת המחדל של מסד הנתונים.
name מחרוזת שמייצגת את שם האובייקט. בדרך כלל שם הטבלה.
objType מחרוזת שמייצגת את סוג האובייקט. המחיר הרגיל: TABLE.
query הצהרת SQL (שמופעלת ישירות).
chunkCount המספר הכולל של המקטעים אם גודל השאילתה של יומן הביקורת גדול מ-cloudsql_mysql_audit_event_split_threshold (90,000).
chunkIndex האינדקס של החלק. ‫chunk_index מתחיל ב-1.
@type הסוג הוא תמיד type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

הדוגמה הבאה מציגה רשומה ביומן הביקורת.

{
"msgType":"activity",
"status":"unsuccessful",
"date":"2021-11-11T06:16:16.163603Z",
"threadId":"750",
"queryId":"26763",
"user":"root",
"priv_user":"root",
"ip":"",
"host":"localhost",
"errCode":"1146",
"cmd":"select",
"objects":[{"db":"test","name":"t4","obj_type":"TABLE"}],
"query":"select * from test.t4",
"chunkCount":2,
"chunkIndex":2,
"@type":"type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
}

השבתת הביקורת של מסד הנתונים

כדי להשבית את הפלאגין Cloud SQL ל-MySQL Audit, אתם יכולים להגדיר את הדגל לניהול מסד הנתונים cloudsql_mysql_audit למצב OFF או להסיר את הדגל.

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. פותחים את המכונה ולוחצים על Edit.
  3. גוללים למטה לקטע דגלים.
  4. כדי להגדיר דגל שלא הוגדר במכונה בעבר, לוחצים על Add flag, בוחרים את cloudsql_mysql_audit מהתפריט הנפתח ומגדירים את הערך שלו ל-OFF.
  5. לוחצים על Save כדי לשמור את השינויים.
  6. מאשרים את השינויים בקטע סימונים בדף סקירה כללית.

gcloud

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_NAME: שם המכונה שבה מגדירים את הדגל.

    gcloud sql instances patch INSTANCE_NAME \
               --database-flags cloudsql_mysql_audit=OFF
    

‫REST v1beta4

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

REST v1

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫instance-id: מזהה המכונה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

דוגמאות לכללי ביקורת

  1. כדי לבדוק את כל הפעילויות של כל המשתמשים:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
  2. ביקורת של כל הפעילויות של משתמש אחד user1:

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
  3. כדי לבקר את כל הפעילויות של כל המשתמשים שמתחילות ב-user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
  4. ביקורת על כל פעולות ה-DML של כל המשתמשים:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
  5. ביקורת על פעולת בחירה במסד נתונים מיוחד db1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
  6. ביקורת על כל הפעילויות במסד נתונים עם התו המיוחד db~1:

    CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
  7. ביקורת על פעולות בחירה ומחיקה בטבלה db1.table1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
  8. ביקורת על כל הפעולות שהצליחו:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
  9. לא לבצע ביקורת על כל הפעילויות של כל המשתמשים שמתחילות ב-user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);

פתרון בעיות

שגיאה פתרון בעיות
אני לא רואה את cloudsql_mysql_audit כשאני מפעיל את הפקודה:

SHOW (global) variables
‫cloudsql_mysql_audit הוא שם הפלאגין. כדי לבדוק אם הוא פעיל, משתמשים בפקודה הבאה:

SHOW PLUGINS

ובודקים את הרשומה status.
למה אני לא רואה את יומני הביקורת של MySQL אחרי שהפעלתי את cloudsql_mysql_audit? צריך להפעיל את יומני הביקורת של גישה לנתונים (כפי שמתואר במאמר הגדרת יומני ביקורת של גישה לנתונים). בנוסף, צריך כללי ביקורת כדי שהפלאגין של Cloud SQL ל-MySQL יבצע ביקורת על יומני הביקורת הרצויים. משתמשים בפרוצדורות מאוחסנות עם reload_mode=1 כדי ליצור כללי ביקורת, או מריצים את הפקודה הבאה או מפעילים מחדש את מסד הנתונים כדי שכללי הביקורת החדשים שנוספו יפעלו:

CALL mysql.cloudsql_reload_audit_rule(1)

בנוסף, ודאו שיש לכם את תפקיד ה-IAM הנדרש כדי לצפות ביומנים ב-Logs Explorer, כמו "צפייה ביומנים פרטיים" (roles/logging.privateLogViewer) ליומני הביקורת של הגישה לנתונים בקטגוריה _Default. למידע נוסף, קראו על התפקידים הנדרשים.
מופיעה השגיאה הבאה כשמעדכנים את הדגל לניהול מסד הנתונים:

Error 1193: Unknown system variable 'cloudsql_mysql_audit_xxx'
‫cloudsql_mysql_audit_xxx פועלים רק כש-Audit Plugin פעיל. מסירים מהמכונה את כל הדגלים הקיימים של cloudsql_mysql_audit_xxx, ואז מפעילים את הפלאגין באמצעות הפקודה הבאה לפני שמעדכנים את הדגלים של cloudsql_mysql_audit_xxx:

cloudsql_mysql_audit=ON
אני רואה שנוצרו יומני ביקורת למרות שלא הגדרתי כללי ביקורת. שינויים בטבלאות של כללי הביקורת (mysql.audit_log_rules ו-mysql.audit_log_rules_expanded) ובפרוצדורות המאוחסנות של הביקורת (mysql.cloudsql_xxxx_audit_rule) מתועדים ביומן כברירת מחדל.
אחרי שביצעתי שינויים במכונה הראשית, אני לא רואה את יומני הביקורת במכונות הרפליקה. שרשורי שכפול ושרשורי שחזור מקריסה לא מתועדים ביומן. ‫Cloud SQL מבצע ביקורת על פעילויות במכונה הראשית, אבל לא במכונת הרפליקה.
ניסיתי להשתמש בפקודה הבאה כדי להגדיר ערכים מרשימה מופרדת בפסיקים, אבל זה לא עובד.

gcloud instances patch --database-flags
אם מציינים רשימה מופרדת בפסיקים של ערכי דגלים באמצעות פקודות gcloud, צריך להשתמש בארגומנט --flags-file. קודם כל, צריך ליצור קובץ עם הפרטים הבאים:

--database-flags:
general_log: OFF
cloudsql_mysql_audit_max_query_length: '20'
cloudsql_mysql_audit_data_masking_cmds: select,update

ואז מריצים את הפקודה הבאה:

gcloud sql instances patch --flags-file=flagfile
הפקודה הבאה מחזירה שגיאה:

CALL mysql.cloudsql_create_canonical_rules
זה קורה בכוונה. ‫mysql.cloudsql_create_canonical_rules צריך להיקרא רק באופן פנימי על ידי mysql.cloudsql_create_audit_rule ו-mysql.cloudsql_update_audit_rule.
אילו פעולות אפשר לבדוק? הפעולות הנתמכות מפורטות ברשימה המלאה של הפעולות הנתמכות. פעולות מסוימות, כמו אלה שבהמשך, לא מבוקרות כי הן לא משפיעות על מסד הנתונים:

USE db_name


או

SHOW VARIABLES


בנוסף, במקרים מסוימים אי אפשר לבדוק את הפונקציות כאובייקט (תכונות שלא נתמכות).
אני רוצה לבדוק את כל הפעולות בטבלה מסוימת, אז יצרתי את כלל הביקורת הבא:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
אבל אני רואה יומני ביקורת שלא קשורים לטבלה הזו, כמו disconnect ו-connect.
פעולות מסוימות, כמו התחברות או התנתקות, נחשבות לפעולות גלובליות. הם מתעלמים משדות הקלט db ו-object.
כשאני יוצר, מעדכן או מוחק כלל ביקורת באמצעות פרוצדורות מאוחסנות, מופיעה השגיאה הבאה.

שרת MySQL פועל עם האפשרות read-only, ולכן הוא לא יכול להפעיל את ההצהרה הזו.
ב-Cloud SQL אי אפשר לשנות פרוצדורות מאוחסנות במכונה לקריאה בלבד. אם המכונה היא ראשית, מסירים את הדגלים read_only. אם המכונה היא רפליקה, צריך לבצע את השינויים במכונה הראשית שלה. אחרי שהשינויים בכללים משוכפלים למכונה המשוכפלת, מריצים במכונה המשוכפלת את הפקודה הבאה כדי לטעון מחדש את הכללים למכונה המשוכפלת:
CALL mysql.cloudsql_reload_audit_rule(1)
כשאני יוצר, מעדכן או מוחק כלל ביקורת, מופיעה השגיאה הבאה, למרות שהשינוי בוצע בהצלחה.

0 rows affected
התגובה של 0 rows affected היא להצהרה האחרונה שבוצעה בפרוצדורה המאוחסנת, ולא לטבלאות. כדי לבדוק אם כלל הביקורת השתנה, מריצים את הפקודות הבאות:

CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;

הפרמטר '*' מפרט את כל הכללים. משתני הפלט @outval ו-@outmsg שומרים את קוד הסטטוס ואת הודעת השגיאה. מידע נוסף זמין במאמר הצגת רשימה של כללי ביקורת.
אני לא יכול להגדיר את cloudsql_mysql_audit_data_masking_cmds ואת cloudsql_mysql_audit_data_masking_regexp עם gcloud. כדי להגדיר ערכי דגלים מורכבים (הדגלים שכוללים תווים מיוחדים) ב-gcloud, צריך להשתמש בארגומנט --flags-file.
יצרתי פרוצדורה מאוחסנת באמצעות ההצהרה CREATE USER, אבל הסיסמה לא מוסתרת. כברירת מחדל, ההסתרה פועלת רק על cmds (פעולות), כמו:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

כדי לסנן את הסיסמה בזמן יצירת הפרוצדורה המאוחסנת, מוסיפים את create_procedure ל- cloudsql_mysql_audit_data_masking_cmds.
קיבלתי הודעת שגיאה על חריגה מזמן הקצוב לתפוגה של המתנה לנעילה כשניסיתי ליצור, לעדכן או למחוק כללי ביקורת. בדרך כלל, השגיאה הזו נגרמת כששני סשנים או יותר מנסים לשנות את כללי הביקורת בו-זמנית. אם זה קורה לעיתים קרובות, צריך להגדיל את הערך של המשתנה innodb_lock_wait_timeout. אפשר להגדיל אותו באופן גלובלי (באמצעות הדגל לניהול מסד הנתונים) או רק לסשן, למשל באמצעות הפקודה הבאה:
SET innodb_lock_wait_timeout=120
.

המאמרים הבאים