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

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

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

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

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

אפשר לשנות את ההתנהגות של תוסף הביקורת של 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

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

המסוף

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

    כניסה לדף Cloud SQL Instances

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

קבוצות של פעולות פעולות שכלולות
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

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

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

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

  • PROJECT_NAME: שם הפרויקט שרוצים לקבל עבורו יומני ביקורת.
    resource.type="cloudsql_database"
    logName="projects/PROJECT_NAME/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 או חשבון השירות ב-GCP.
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, אפשר להגדיר את הדגל של מסד הנתונים cloudsql_mysql_audit למצב OFF או להסיר את הדגל.

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. פותחים את המופע ולוחצים על עריכה.
  3. גוללים למטה לקטע דגלים.
  4. כדי להגדיר דגל שלא הוגדר לפני כן במופע, לוחצים על הוספת דגל, בוחרים באפשרות 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? צריך להפעיל את יומני הביקורת Data Access (כמו שמתואר במאמר הגדרת יומני ביקורת Data Access). בנוסף, צריך כללי ביקורת כדי שהתוסף Cloud SQL ל-MySQL Audit יבצע ביקורת על יומני הביקורת הרצויים. אפשר להשתמש בפרוצדורות מאוחסנות עם ‎ `reload_mode=1` ‎ כדי ליצור כללי ביקורת, או להריץ את הפקודה הבאה או להפעיל מחדש את מסד הנתונים כדי שהכללים החדשים של הביקורת יפעלו:

CALL mysql.cloudsql_reload_audit_rule(1)
מוצגת לי השגיאה הבאה כשמעדכנים את הדגל של מסד הנתונים:

Error 1193: Unknown system variable '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. הפרמטר gcloud מחייב שימוש בארגומנט --flags-file כדי להגדיר ערכים מורכבים של דגלים (הדגלים שכוללים תווים מיוחדים).
יצרתי פרוצדורה מאוחסנת באמצעות ההצהרה CREATE USER, אבל הסיסמה לא מוסתרת. כברירת מחדל, ההסתרה פועלת רק עבור cmds (פעולות), כמו הפעולות הבאות:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

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

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