שימוש בבקרת גישה למסד נתונים של 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 לביקורת

הפלאגין Cloud SQL ל-MySQL Audit Plugin (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

אתם יכולים לשנות את ההתנהגות של הפלאגין לביקורת של 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 במסוף Google Cloud .

    כניסה לדף 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). ‫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 בתור יומני ביקורת של גישה לנתונים. אפשר לראות את יומני הביקורת שנוצרו במסד הנתונים של 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 במסוף Google Cloud .

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

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
.

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