במאמר הזה מוסבר איך להפעיל את תוסף הביקורת של 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.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- פותחים את המופע ולוחצים על עריכה.
- גוללים למטה לקטע דגלים.
- כדי להגדיר דגל שלא הוגדר לפני כן במופע, לוחצים על הוספת דגל, בוחרים באפשרות
cloudsql_mysql_auditבתפריט הנפתח ומגדירים את הערך שלו ל-ON. - לוחצים על Save כדי לשמור את השינויים.
- מאשרים את השינויים בקטע דגלים בדף סקירה כללית.
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(אלפיות השנייה).
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- פותחים את המופע ולוחצים על עריכה.
- גוללים למטה לקטע דגלים.
- כדי להגדיר סימון שלא הוגדר לפני כן במופע, לוחצים על הוספת סימון, בוחרים סימון של מסד נתונים מהרשימה שלמעלה בתפריט הנפתח ומגדירים את הערך שלו.
- לוחצים על Save כדי לשמור את השינויים.
- מאשרים את השינויים בקטע דגלים בדף סקירה כללית.
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 |
אובייקטים של ביקורת. בדרך כלל טבלה. השדה הזה כולל את הפרטים הבאים על האובייקט:
|
||||||
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 או להסיר את הדגל.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- פותחים את המופע ולוחצים על עריכה.
- גוללים למטה לקטע דגלים.
- כדי להגדיר דגל שלא הוגדר לפני כן במופע, לוחצים על הוספת דגל, בוחרים באפשרות
cloudsql_mysql_auditבתפריט הנפתח ומגדירים את הערך שלו ל-OFF. - לוחצים על Save כדי לשמור את השינויים.
- מאשרים את השינויים בקטע דגלים בדף סקירה כללית.
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 שדומה לזו:
דוגמאות לכללי ביקורת
ביקורת על כל הפעילויות של כל המשתמשים:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
ביקורת של כל הפעילויות של משתמש יחיד
user1:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
ביקורת על כל הפעילויות של כל המשתמשים שמתחילות ב-
user:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
ביקורת של כל פעולות ה-DML עבור כל המשתמשים:
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
ביקורת של פעולת בחירה במסד נתונים מיוחד
db1:CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
ביקורת של כל הפעילויות במסד נתונים עם התו המיוחד
db~1:CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
ביקורת על פעולות בחירה ומחיקה בטבלה
db1.table1:CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
ביקורת על כל הפעולות שהושלמו בהצלחה:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
לא לבקר את כל הפעילויות של כל המשתמשים שמתחילים ב-
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 |