הפלאגין Cloud SQL for MySQL Audit מאפשר לתעד את הפעילות במסד הנתונים ולעקוב אחרי פעולות של משתמשים במכונות שלכם. ניהול יומני הביקורת האלה עוזר לכם לעמוד בדרישות הרגולטוריות ולזהות גישה לא מורשית.
במסמך הזה, אדמינים ומבקרים נקראים ביחד משתמשי ביקורת. לסקירה כללית, קראו את המאמר ביקורת של מסדי נתונים ב-MySQL. למידע נוסף על פלאגינים של MySQL, קראו את המאמר טעינת פלאגינים של MySQL.
לפני שמתחילים
יומני הביקורת Data Access
להפעיל ולהגדיר יומני ביקורת של גישה לנתונים. הגדרת יומני ביקורת של גישה לנתונים
ההרשאות שנדרשות למשתמשים עם הרשאת ביקורת
כדי להריץ את הפרוצדורות המאוחסנות של הביקורת, צריך הרשאות EXECUTE. אם אדמין צריך לשנות את הרשאות הגישה של מבקר לפרוצדורות המאוחסנות של הביקורת, הוא צריך להשתמש בפקודה GRANT או REVOKE בלקוח mysql. למידע נוסף על הרשאות משתמש, קראו את המאמר הרשאות משתמש ב-MySQL. לדוגמה, אם אדמין רוצה לתת למשתמש בשם user גישה לניהול כללי הביקורת, הוא יכול לתת את ההרשאות באמצעות ההצהרה הבאה:
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';
אם האדמין ירצה לבטל את הגישה של המבקר, הוא יוכל לעשות את זה באמצעות ההצהרה הבאה:
REVOKE ALL ON PROCEDURE mysql.cloudsql_list_audit_rule FROM 'user'@'%';
כברירת מחדל, משתמשים שנוצרו באמצעות Cloud SQL (חוץ ממשתמשי IAM) הם אדמינים שיש להם את כל ההרשאות חוץ מ-FILE ו-SUPER, כולל כל ההרשאות לפרוצדורות המאוחסנות של הביקורת. כברירת מחדל, למשתמשי מסד נתונים ב-IAM אין הרשאות.
הפעלת הפלאגין Cloud SQL ל-MySQL Audit
הפלאגין Cloud SQL ל-MySQL Audit (cloudsql_mysql_audit) שולט בהתנהגות הביקורת של מכונה נתונה של מסד נתונים. כדי להשתמש בפלאגין, צריך קודם להפעיל אותו במכונה של Cloud SQL.
כדי להפעיל את הפלאגין של cloudsql_mysql_audit, אפשר להשתמש באחת מהאפשרויות הבאות:
--cloudsql_mysql_audit=ONמורה לשרת להפעיל את הפלאגין. אם הפלאגין לא מופעל, השרת פועל כשהפלאגין מושבת.
--cloudsql_mysql_audit=FORCEהשרת מפעיל את הפלאגין, אבל אם ההפעלה נכשלת, השרת לא מתחיל לפעול. במילים אחרות, האפשרות הזו מאלצת את השרת לפעול כשהפלאגין מופעל, או לא לפעול בכלל.
--cloudsql_mysql_audit=FORCE_PLUS_PERMANENTכמו FORCE, אבל גם מונע את פריקת הפלאגין בזמן הריצה. אם משתמש מנסה להסיר את הפלאגין באמצעות UNINSTALL PLUGIN, מתרחשת שגיאה.
מצבי ההפעלה של הפלאגינים מופיעים בעמודה PLUGIN_STATUS בטבלה INFORMATION_SCHEMA.PLUGINS.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .
- פותחים את המכונה ולוחצים על Edit.
- גוללים למטה לקטע דגלים.
- כדי להגדיר דגל שלא הוגדר במכונה בעבר, לוחצים על Add flag, בוחרים את
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 Audit Plugin
אתם יכולים לשנות את ההתנהגות של הפלאגין לביקורת של Cloud SQL ל-MySQL באמצעות הדגלים הבאים. אפשר לשנות את כל הדגלים בלי להפעיל מחדש את מסד הנתונים. במאמר הגדרת דגלים לניהול מסדי נתונים מוסבר איך לנהל את הדגלים.
cloudsql_mysql_audit_data_masking_regexביטוי רגולרי שמשמש להסתרת נתונים ותואם לביטויים רגולריים תואמי Perl (PCRE).
כברירת מחדל, ביומן הביקורת שנוצר, הסיסמאות של המשתמשים (
<psw>) מוחלפות במסכת סיסמה של***.הביטוי הרגולרי חל רק על הצהרות עם סוג פקודה שצוין באמצעות
cloudsql_mysql_audit_data_masking_cmds. כשמשתמשים ב-gcloud, צריך להשתמש בקובץ דגל כדי להגדיר ערכים עם תווים מיוחדים מורכבים.ערכי ברירת המחדל של הדגל הזה:
identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/| \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[ '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?) (?<!\\)['|"]
ריכזנו כאן כמה דוגמאות.
בלי
cloudsql_mysql_audit_data_masking_regex, רשומה ביומן הביקורת שמתארת פקודה ליצירת משתמש תיראה כך:{..."cmd":"create_user","query":"create user user1@'localhost' identified by 'pw'"}
עם ערך ברירת המחדל
cloudsql_mysql_audit_data_masking_regex, אותו יומן ביקורת ישתנה ל:{..."cmd":"create_user","query":"create user user1@'localhost' identified by '***'"}
אם מגדירים את
cloudsql_mysql_audit_data_masking_regexלערך(?<psw>.*), Cloud SQL יכול לסנן את כל תוכן השאילתה.{..."cmd":"create_user","query":"***"}
cloudsql_mysql_audit_data_masking_cmdsרשימה מופרדת בפסיקים של פקודות שעליהן חל הביטוי הרגולרי להסתרת נתונים (cloudsql_mysql_audit_data_masking_regex). כדי להפסיק את הסינון, מגדירים מחרוזת ריקה (
""). כשמשתמשים ב-gcloud, צריך להשתמש בקובץ דגל כדי להגדיר רשימה מופרדת בפסיקים. ערך ברירת המחדל כולל פקודות MySQL עם סעיף הסיסמה הבא:create_user,alter_user,grant,update
cloudsql_mysql_audit_max_query_lengthהמדיניות קובעת את האורך המקסימלי של השאילתה שתישמר ביומן הביקורת. אם אתם לא צריכים לראות את פרטי השאילתה, אתם יכולים להשתמש ב-
0, וכך השאילתה לא תתועד ביומן הביקורת. כך אפשר לחסוך מקום אחסון ביומן ולהוזיל את העלות. -1פירושו שאין הגבלה. ברירת המחדל היא-1.cloudsql_mysql_audit_log_write_periodתקופת הכתיבה של היומן, שבה ה-writer thread כותב את תוכן מאגר הנתונים הזמניים בדיסק אחרי שהגיע למספר אלפיות השנייה שהגדרתם לאפשרות הדגל הזו, או כשמאגר הנתונים הזמניים מלא. אם מגדירים את האפשרות הזו ל-
0, השרשור של המשתמש נאלץ להמתין להודעה מהשרשור של הכותב על כך שהכתיבה הושלמה. ערך ברירת המחדל הוא500(אלפיות השנייה).
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .
- פותחים את המכונה ולוחצים על Edit.
- גוללים למטה לקטע דגלים.
- כדי להגדיר דגל שלא הוגדר בעבר במכונה, לוחצים על Add flag, בוחרים דגל לניהול מסד נתונים מהרשימה שלמעלה בתפריט הנפתח ומגדירים את הערך שלו.
- לוחצים על 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. יש ארבע פרוצדורות מאוחסנות שאפשר להשתמש בהן כדי ליצור, להציג, לעדכן ולמחוק כללי ביקורת.
כל פרוצדורה מאוחסנת מחזירה שני משתנים: @outval ו-@outmsg. המשתנים האלה מציינים את קוד הסטטוס ואת הודעת השגיאה של הפרוצדורה המאוחסנת, בהתאמה. אפשר להשתמש בכוכבית (*) כתו כללי לחיפוש של שמות משתמשים, מארחים, מסדי נתונים וטבלאות. אפשר להשתמש בכוכבית כסיומת, כתחילית או גם וגם. בנוסף, אפשר להשתמש בתו הכללי לחיפוש % רק למארחים. אפשר להשתמש בסימן הטעמה משנית (`) כדי לציין שצריך להשתמש במחרוזת באופן מילולי. לדוגמה, `ta*ble` תואם באופן מילולי.
כדי שהשינויים החדשים ייכנסו לתוקף, צריך להריץ את הפרוצדורות המאוחסנות עם הפרמטר reload_mode=1 או לקרוא ל-mysql.cloudsql_reload_audit_rule(1).
יצירת כללי ביקורת
אתם יכולים להשתמש ב-mysql.cloudsql_create_audit_rule כדי ליצור כלל ביקורת חדש.
כדי ליצור את כלל הביקורת ולטעון אותו מחדש בקריאה אחת, משתמשים בהצהרה הבאה:
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;
כדי ליצור את הכלל ולטעון אותו מחדש בקריאה נפרדת, משתמשים בהצהרה הבאה:
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);
הפקודה הקודמת מאפשרת ליצור כמה כללים ואז לטעון מחדש את כל השינויים בו-זמנית.
בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.
| פרמטרים של קלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
user@host או user@ip |
מחרוזת |
רשימה מופרדת בפסיקים של משתמשי מסד הנתונים שצריך לבדוק. צריך להשתמש בפורמט user@host או user@ip. |
user1@localhost,user1@*,user1@%,user@ip
|
db |
מחרוזת | רשימה מופרדת בפסיקים של מסדי נתונים לביקורת. | db1,db2,db3* |
obj |
מחרוזת | רשימה מופרדת בפסיקים של אובייקטים במסד הנתונים שצריך לבדוק. | table1,table2,table3* |
ops |
מחרוזת | רשימה מופרדת בפסיקים של פעולות במסד הנתונים שצריך לבדוק. | select,delete,insert |
op_result |
מחרוזת |
מבצעים ביקורת על פעולות שהצליחו (S), פעולות שנכשלו (U) או גם פעולות שהצליחו וגם פעולות שנכשלו (B), או יוצרים כלל להחרגה (E). |
S, U, B אוE
|
reload_mode |
מספר שלם | 0 כדי לא לטעון מחדש את הכלל ו-1 כדי לטעון מחדש. |
0 או 1 |
| פרמטרים של פלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
@outval |
int | קוד הסטטוס של התהליך המאוחסן. | 0 אם הפעולה הצליחה ו-1 אם היא נכשלה. |
@outmsg |
מחרוזת | הודעת השגיאה של התהליך המאוחסן. |
אלה המגבלות של כללי הביקורת:
| מגבלות | |
|---|---|
אורך של user, db, obj,
ו-ops. |
הגודל המקסימלי הוא 2,048 תווים. |
מספר השילובים של user, db, obj ו-ops. |
אפשר להוסיף עד 1,000 שילובים. לדוגמה, כלל ביקורת שבודק את user1,user2, db1, db2, table1,table2 ו-select,delete יוצר 2 x 2 x 2 x 2 = 16 שילובים. |
הצגת רשימה של כללי ביקורת
מבקרים יכולים להשתמש ב-mysql.cloudsql_list_audit_rule כדי להציג רשימה של כללי ביקורת קיימים.
כדי להציג את כללי הביקורת 1 ו-2, משתמשים בפקודות הבאות:
CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;
כדי להציג את כל כללי הביקורת:
CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;
בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.
| פרמטרים של קלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
rule_id |
מחרוזת | רשימה מופרדת בפסיקים של מזהי הכללים שרוצים להציג. | 1,2,3 |
| פרמטרים של פלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
@outval |
int | קוד הסטטוס של התהליך המאוחסן. | 0 אם הפעולה הצליחה ו-1 אם היא נכשלה. |
@outmsg |
מחרוזת | הודעת השגיאה של התהליך המאוחסן. |
עדכון כללי הביקורת
אפשר להשתמש ב-mysql.cloudsql_update_audit_rule כדי לעדכן כלל ביקורת קיים.
כדי לעדכן את כלל הביקורת ולטעון אותו מחדש בקריאה אחת, משתמשים בהצהרה הבאה:
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;
יכול להיות שתרצו לעדכן כמה כללי ביקורת בסשן אחד לפני שתטענו מחדש את הכללים. אתם יכולים להשתמש בפרוצדורה המאוחסנת הבאה כדי לעדכן את הכללים בשלב אחד, ואז לטעון מחדש את הכללים האלה בשלב מאוחר יותר.
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);
בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.
| פרמטרים של קלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
rule_id |
int | המזהה של הכלל שרוצים לעדכן. | 5 |
user@host |
מחרוזת |
רשימה מופרדת בפסיקים של משתמשי מסד הנתונים שצריך לבדוק. צריך להשתמש בפורמט user@host. |
user1@localhost,user1@*user1@%
|
db |
מחרוזת | רשימה מופרדת בפסיקים של מסדי נתונים לביקורת. | db1,db2,db3* |
obj |
מחרוזת | רשימה מופרדת בפסיקים של אובייקטים במסד הנתונים שצריך לבדוק. | table1,table2,table3* |
ops |
מחרוזת | רשימה מופרדת בפסיקים של פעולות במסד הנתונים שצריך לבדוק. | SELECT,DELETE,INSERT |
op_result |
מחרוזת |
מבצעים ביקורת על פעולות שהצליחו (S), פעולות שנכשלו (U) או גם פעולות שהצליחו וגם פעולות שנכשלו (B), או יוצרים כלל להחרגה (E). |
S, U, B אוE
|
reload_mode |
מספר שלם | 0 כדי לא לטעון מחדש את הכלל ו-1 כדי לטעון מחדש. |
0 או 1 |
| פרמטרים של פלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
@outval |
int | קוד הסטטוס של התהליך המאוחסן. | 0 אם הפעולה הצליחה ו-1 אם היא נכשלה. |
@outmsg |
מחרוזת | הודעת השגיאה של התהליך המאוחסן. |
אלה המגבלות של כללי הביקורת:
| מגבלות | |
|---|---|
אורך של user, db, obj
ו-ops. |
הגודל המקסימלי הוא 2,048 תווים. |
מספר השילובים של user, db,
obj ו-ops. |
אפשר להוסיף עד 1,000 שילובים. לדוגמה, כלל ביקורת שבודק את user1,user2, db1, db2, table1,table2 ו-select,delete יוצר 2 x 2 x 2 x 2 = 16 שילובים. |
מחיקת כללי ביקורת
אתם יכולים להשתמש ב-mysql.cloudsql_delete_audit_rule כדי למחוק כלל ביקורת קיים.
כדי למחוק את כלל הביקורת ולטעון אותו מחדש בקריאה אחת, משתמשים בהצהרה הבאה:
CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;
כדי למחוק את הכלל ולטעון אותו מחדש בקריאה נפרדת, משתמשים בהצהרה הבאה:
CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);
הפקודה הקודמת מאפשרת למחוק כמה כללים ואז לטעון מחדש את כל השינויים בו-זמנית.
בטבלאות הבאות מפורטים הפרמטרים של הקלט והפלט של הפקודה הקודמת.
| פרמטרים של קלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
rule_id |
מחרוזת | רשימה מופרדת בפסיקים של מזהי כללים להסרה. | 1,2,3 |
reload_mode |
מספר שלם | 0 כדי לא לטעון מחדש את הכלל ו-1 כדי לטעון מחדש. |
0 או 1 |
| פרמטרים של פלט | |||
|---|---|---|---|
| שם | סוג | תיאור | דוגמה |
@outval |
int | קוד הסטטוס של התהליך המאוחסן. | 0 אם הפעולה הצליחה ו-1 אם היא נכשלה. |
@outmsg |
מחרוזת | הודעת השגיאה של התהליך המאוחסן. |
קבוצות של פעולות
הפלאגין Cloud SQL for MySQL Audit תומך בשימוש בקבוצות של פעולות בהגדרות של כללים, כדי לבצע ביקורת על אוספים של פעילויות. כדי לפשט את היצירה של כללי ביקורת, אתם יכולים להשתמש בקבוצות הפעולות הבאות.
| קבוצות של פעולות | הפעולות שכלולות |
|---|---|
dql |
select |
dml |
delete,delete_multi,
insert, insert_select,
load, replace,
replace_select, truncate,
update, update_multi, |
ddl |
alter_db, alter_event,
alter_function, alter_procedure,
alter_table, alter_user,
create_db, create_event,
create_function, create_index,
create_procedure, create_table,
create_trigger, create_user,
create_udf, create_view,
drop_db, drop_event,
drop_function, drop_index,
drop_procedure, drop_table,
drop_trigger, drop_user,
drop_view, rename_table,
rename_user
|
dcl |
grant, revoke,
revoke_all |
show |
show_binlog_events,
show_create_func, show_create_proc,
show_procedure_code,
show_create_event,
show_create_trigger, show_events,
show_function_code, show_grants,
show_relaylog_events, show_triggers,
|
call |
call_procedure |
צפייה ביומני ביקורת של מסדי נתונים ב-Cloud SQL
צפייה ברשומות של יומן הביקורת של מסד הנתונים ב-Cloud Logging
כדי לצפות ביומני הביקורת של מסד הנתונים, קודם צריך לוודא שהפעלתם את יומני הביקורת של הגישה לנתונים בפרויקט. יומני הביקורת של MySQL שנוצרים במכונה מסוימת נשלחים ל-Cloud Logging בתור יומני ביקורת של גישה לנתונים. אפשר לראות את יומני הביקורת שנוצרו במסד הנתונים של MySQL בדף Logs Explorer.
ב-Logs Explorer, אתם יכולים להציג את יומני הביקורת של MySQL באמצעות השאילתה הבאה, כדי להציג את כל יומני הביקורת של מסד הנתונים של MySQL בפרויקט נתון ב-Cloud SQL.
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט שרוצים למצוא את יומני הביקורת שלו.
resource.type="cloudsql_database" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
אפשר גם לבחור את מסנן היומנים cloudaudit.googleapis.com/data_access.
הפורמט של יומן הביקורת
יומן ביקורת כולל את השדות הבאים.
| שם השדה | תיאור | ||||||
|---|---|---|---|---|---|---|---|
msgType |
מחרוזת שמייצגת את סוג ההודעה ביומן הביקורת.הערך היחיד של msgType הוא activity. |
||||||
status |
סטטוס הפעולה, success או unsuccessful. |
||||||
date |
חותמת זמן שמציינת מתי נוצר אירוע הביקורת. | ||||||
threadId |
המזהה של השרשור ב-MySQL. | ||||||
queryId |
המזהה של שאילתת MySQL. | ||||||
user |
מחרוזת שמייצגת את שם המשתמש שנשלח על ידי הלקוח. This might differ from the privUser value. | ||||||
privUser |
מחרוזת שמייצגת את המשתמש שהשרת אימת את הלקוח בתורו. זהו שם המשתמש שבו השרת משתמש לבדיקת הרשאות. הוא עשוי להיות שונה מהערך של המשתמש. | ||||||
gcpIamAccount |
מחרוזת שמייצגת את חשבון ה-IAM או את חשבון השירות. | ||||||
ip |
מחרוזת שמייצגת את כתובת ה-IP של הלקוח. | ||||||
host |
מחרוזת שמייצגת את שם המארח של הלקוח. | ||||||
errCode
|
קוד השגיאה של MySQL לפעולה שנכשלה. אפשר לעיין בהפניה להודעות שגיאה בשרת MySQL. | ||||||
cmd |
מחרוזת שמציינת את הצהרת ה-SQL (סוג הפעולה) שבה צריך להשתמש. לדוגמה, INSERT, UPDATE או DELETE. |
||||||
objects |
אובייקטי הביקורת. בדרך כלל טבלה. השדה הזה כולל את הפרטים הבאים על האובייקט:
|
||||||
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 או להסיר את הדגל.
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .
- פותחים את המכונה ולוחצים על Edit.
- גוללים למטה לקטע דגלים.
- כדי להגדיר דגל שלא הוגדר במכונה בעבר, לוחצים על Add flag, בוחרים את
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? |
צריך להפעיל את יומני הביקורת של גישה לנתונים (כפי שמתואר במאמר הגדרת יומני ביקורת של גישה לנתונים). בנוסף, צריך כללי ביקורת כדי שהפלאגין של Cloud SQL ל-MySQL יבצע ביקורת על יומני הביקורת הרצויים. משתמשים בפרוצדורות מאוחסנות עם reload_mode=1 כדי ליצור כללי ביקורת, או מריצים את הפקודה הבאה או מפעילים מחדש את מסד הנתונים כדי שכללי הביקורת החדשים שנוספו יפעלו:
CALL mysql.cloudsql_reload_audit_rule(1) בנוסף, ודאו שיש לכם את תפקיד ה-IAM הנדרש כדי לצפות ביומנים ב-Logs Explorer, כמו "צפייה ביומנים פרטיים" ( roles/logging.privateLogViewer) ליומני הביקורת של הגישה לנתונים בקטגוריה _Default. למידע נוסף, קראו על התפקידים הנדרשים.
|
|
מופיעה השגיאה הבאה כשמעדכנים את הדגל לניהול מסד הנתונים:
Error 1193: Unknown system variable 'cloudsql_mysql_audit_xxx' |
cloudsql_mysql_audit_xxx פועלים רק כש-Audit Plugin פעיל. מסירים מהמכונה את כל הדגלים הקיימים של cloudsql_mysql_audit_xxx, ואז מפעילים את הפלאגין באמצעות הפקודה הבאה לפני שמעדכנים את הדגלים של cloudsql_mysql_audit_xxx:
cloudsql_mysql_audit=ON |
| אני רואה שנוצרו יומני ביקורת למרות שלא הגדרתי כללי ביקורת. | שינויים בטבלאות של כללי הביקורת (mysql.audit_log_rules ו-mysql.audit_log_rules_expanded) ובפרוצדורות המאוחסנות של הביקורת (mysql.cloudsql_xxxx_audit_rule) מתועדים ביומן כברירת מחדל. |
| אחרי שביצעתי שינויים במכונה הראשית, אני לא רואה את יומני הביקורת במכונות הרפליקה. | שרשורי שכפול ושרשורי שחזור מקריסה לא מתועדים ביומן. Cloud SQL מבצע ביקורת על פעילויות במכונה הראשית, אבל לא במכונת הרפליקה. |
ניסיתי להשתמש בפקודה הבאה כדי להגדיר ערכים מרשימה מופרדת בפסיקים, אבל זה לא עובד.
gcloud instances patch --database-flags
|
אם מציינים רשימה מופרדת בפסיקים של ערכי דגלים באמצעות פקודות gcloud, צריך להשתמש בארגומנט --flags-file. קודם כל, צריך ליצור קובץ עם הפרטים הבאים:
--database-flags: general_log: OFF cloudsql_mysql_audit_max_query_length: '20' cloudsql_mysql_audit_data_masking_cmds: select,update ואז מריצים את הפקודה הבאה: gcloud sql instances patch --flags-file=flagfile |
הפקודה הבאה מחזירה שגיאה:
CALL mysql.cloudsql_create_canonical_rules
|
זה קורה בכוונה. mysql.cloudsql_create_canonical_rules צריך להיקרא רק באופן פנימי על ידי mysql.cloudsql_create_audit_rule ו-mysql.cloudsql_update_audit_rule. |
| אילו פעולות אפשר לבדוק? |
הפעולות הנתמכות מפורטות ברשימה המלאה של הפעולות הנתמכות. פעולות מסוימות, כמו אלה שבהמשך, לא מבוקרות כי הן לא משפיעות על מסד הנתונים:
USE db_name או SHOW VARIABLES בנוסף, במקרים מסוימים אי אפשר לבדוק את הפונקציות כאובייקט (תכונות שלא נתמכות). |
אני רוצה לבדוק את כל הפעולות בטבלה מסוימת, אז יצרתי את כלל הביקורת הבא:
mysql.cloudsql_create_audit_rule("user@*","db",
"table","*","B",1,@1,@2);
אבל אני רואה יומני ביקורת שלא קשורים לטבלה הזו, כמו disconnect ו-connect.
|
פעולות מסוימות, כמו התחברות או התנתקות, נחשבות לפעולות גלובליות. הם מתעלמים משדות הקלט db ו-object. |
|
כשאני יוצר, מעדכן או מוחק כלל ביקורת באמצעות פרוצדורות מאוחסנות, מופיעה השגיאה הבאה.
שרת MySQL פועל עם האפשרות read-only, ולכן הוא לא יכול להפעיל את ההצהרה הזו.
|
ב-Cloud SQL אי אפשר לשנות פרוצדורות מאוחסנות במכונה לקריאה בלבד. אם המכונה היא ראשית, מסירים את הדגלים read_only. אם המכונה היא רפליקה, צריך לבצע את השינויים במכונה הראשית שלה. אחרי שהשינויים בכללים משוכפלים למכונה המשוכפלת, מריצים במכונה המשוכפלת את הפקודה הבאה כדי לטעון מחדש את הכללים למכונה המשוכפלת:
CALL mysql.cloudsql_reload_audit_rule(1) |
כשאני יוצר, מעדכן או מוחק כלל ביקורת, מופיעה השגיאה הבאה, למרות שהשינוי בוצע בהצלחה.
0 rows affected
|
התגובה של 0 rows affected היא להצהרה האחרונה שבוצעה בפרוצדורה המאוחסנת, ולא לטבלאות. כדי לבדוק אם כלל הביקורת השתנה, מריצים את הפקודות הבאות:
CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;הפרמטר '*' מפרט את כל הכללים. משתני הפלט @outval ו-@outmsg שומרים את קוד הסטטוס ואת הודעת השגיאה. מידע נוסף זמין במאמר הצגת רשימה של כללי ביקורת.
|
אני לא יכול להגדיר את cloudsql_mysql_audit_data_masking_cmds
ואת cloudsql_mysql_audit_data_masking_regexp עם
gcloud. |
כדי להגדיר ערכי דגלים מורכבים (הדגלים שכוללים תווים מיוחדים) ב-gcloud, צריך להשתמש בארגומנט --flags-file. |
יצרתי פרוצדורה מאוחסנת באמצעות ההצהרה CREATE USER, אבל הסיסמה לא מוסתרת. |
כברירת מחדל, ההסתרה פועלת רק על cmds (פעולות), כמו:
CREATE_USER, ALTER_USER,
GRANT, UPDATE.
כדי לסנן את הסיסמה בזמן יצירת הפרוצדורה המאוחסנת, מוסיפים את create_procedure ל-
cloudsql_mysql_audit_data_masking_cmds.
|
| קיבלתי הודעת שגיאה על חריגה מזמן הקצוב לתפוגה של המתנה לנעילה כשניסיתי ליצור, לעדכן או למחוק כללי ביקורת. | בדרך כלל, השגיאה הזו נגרמת כששני סשנים או יותר מנסים לשנות את כללי הביקורת בו-זמנית. אם זה קורה לעיתים קרובות,
צריך להגדיל את הערך של המשתנה
innodb_lock_wait_timeout. אפשר להגדיל אותו באופן גלובלי (באמצעות הדגל לניהול מסד הנתונים) או רק לסשן, למשל באמצעות הפקודה הבאה:
SET innodb_lock_wait_timeout=120 |