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

במאמר הזה מוסבר איך להפעיל את הפלאגין של Cloud SQL ל-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.cloudql_list_audit_rule FROM 'user'@'%';

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

הפעלת פלאגין הביקורת של Cloud SQL ל-MySQL

תוסף הביקורת (Audit) של Cloud SQL ל-MySQL‏ (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 במסוף Google Cloud .

    כניסה לדף 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 Audit באמצעות הדגלים הבאים. אפשר לשנות את כל הדגלים בלי להפעיל מחדש את מסד הנתונים. במאמר הגדרת דגלים לניהול מסדי נתונים מוסבר איך לנהל את הדגלים.

  • 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 במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

  2. פותחים את המופע ולוחצים על עריכה.
  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 Plugin. יש ארבע פרוצדורות מאוחסנות שאתם יכולים להשתמש בהן כדי ליצור, להציג, לעדכן ולמחוק כללי ביקורת.

כל פרוצדורה מאוחסנת מחזירה שני משתנים: @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) של פעולות. ‫S,U או B
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). ‫S,U או B
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 ל-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 כיומני ביקורת של Data Access. אפשר לראות את יומני הביקורת שנוצרו במסד הנתונים של 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 מחרוזת שמייצגת את שם המשתמש שנשלח על ידי הלקוח. יכול להיות שהערך הזה יהיה שונה מהערך של privUser.
privUser מחרוזת שמייצגת את המשתמש שהשרת אימת את הלקוח בתורו. זהו שם המשתמש שבו השרת משתמש לבדיקת הרשאות. יכול להיות שהערך הזה יהיה שונה מערך המשתמש.
gcpIamAccount מחרוזת שמייצגת את חשבון ה-IAM או את חשבון השירות.
ip מחרוזת שמייצגת את כתובת ה-IP של הלקוח.
host מחרוזת שמייצגת את שם המארח של הלקוח.
errCode קוד השגיאה של MySQL לפעולה שנכשלה. אפשר לעיין במאמר MySQL Server Error Message Reference.
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 במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

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

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 Audit יבצע ביקורת על יומני הביקורת הרצויים. משתמשים בפרוצדורות מאוחסנות עם reload_mode=1 כדי ליצור כללי ביקורת, או מריצים את הפקודה הבאה או מפעילים מחדש את מסד הנתונים כדי שכללי הביקורת החדשים שנוספו יפעלו:

‫
CALL mysql.cloudsql_reload_audit_rule(1)

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

שגיאה 1193: משתנה מערכת לא ידוע cloudsql_mysql_audit_xxx
הדגלים של cloudsql_mysql_audit_xxx פועלים רק כשהתוסף Audit פעיל. מסירים את כל הדגלים הקיימים של 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 מתייחסת להצהרה האחרונה שהופעלה בפרוצדורה המאוחסנת, ולא לטבלאות. כדי לראות אם כלל הביקורת השתנה, משתמשים בפקודה הבאה:

mysql.cloudsql_list_audit_rule
אני לא יכול להגדיר את cloudsql_mysql_audit_data_masking_cmds ואת cloudsql_mysql_audit_data_masking_regexp עם gcloud. כדי להגדיר ערכי דגלים מורכבים (הדגלים שכוללים תווים מיוחדים), צריך להשתמש בארגומנט --flags-file ב-gcloud.
יצרתי פרוצדורה מאוחסנת באמצעות ההצהרה 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
.

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