אפשר ליצור סשן לקריאה בלבד ב-Cloud SQL ל-PostgreSQL באמצעות הפרמטר cloudsql_session_read_only session. הגישה הזו היא דרך חזקה יותר למנוע שינוי נתונים במהלך סשן, בהשוואה לאפשרויות הרגילות של PostgreSQL לקריאה בלבד. באמצעות הפרמטר cloudsql_session_read_only, אפשר להגדיר את הסשן כקריאה בלבד באופן זמני או קבוע למשך הסשן. אתם יכולים להשתמש בסוג כזה של סשנים לקריאה בלבד כדי להגן על תקינות נתונים בהקשרים שונים, כולל בסשנים שבהם אתם משתמשים בכלים של Model Context Protocol (MCP), בכלים לדיווח ובכלים לביקורת.
כברירת מחדל, cloudsql_session_read_only מוגדר כ-off, שמאפשר שינוי נתונים.
מה אי אפשר לעשות במצב קריאה-בלבד
בסשן לקריאה בלבד, אי אפשר לשנות נתונים במסד הנתונים. באופן ספציפי, במצב קריאה-בלבד אי אפשר לבצע את הפעולות הבאות:
במצב קריאה בלבד לא נוצרים מזהי עסקאות חדשים. אי אפשר להתחיל עסקאות שניתן לכתוב בהן, ולכן אי אפשר להפעיל הוראות של שפת טיפול בנתונים (DML) או שפת הגדרת נתונים (DDL). עם זאת, אם הדגל מוגדר באמצע של טרנזקציה פעילה שניתן לכתוב בה, אפשר להריץ הוראות בסיסיות של DML ו-DDL עד שהטרנזקציה מסתיימת.
במצב קריאה בלבד אי אפשר להשתמש בסוגים הבאים של הצהרות וקריאות:
- הצהרות כמו
VACUUMו-NOTIFY. - פונקציות עם תופעות לוואי. המשמעות היא שאי אפשר לקרוא ל-
FUNCTIONאו להפעילPROCEDUREשמוגדרים גם כ-VOLATILEוגם כ-LANGUAGE Cאו כ-LANGUAGE internal, כי חלק מתופעות הלוואי שלהם לא דורשות מזהה עסקה. לדוגמה,pg_promote(),pg_cancel_backend()ו-pg_terminate_backend(). - עטיפות נתונים חיצוניות.
- כל פונקציה או פרוצדורה שיצרתם בשפת פרוצדורות של SQL (PL).
- הצהרות כמו
הגדרת סטטוס קריאה בלבד
במהלך סשן של Cloud SQL ל-PostgreSQL, אפשר להשתמש בהצהרת SET כדי לשנות את הערך של הדגל cloudsql_session_read_only באופן הבא:
SET cloudsql_session_read_only = 'on'ההצהרה הזו מגדירה את הסשן לקריאה בלבד, ומונעת מכל אחד לשנות את הנתונים כל עוד הדגל מוגדר לערך
on. כדי להמשיך לשנות את הנתונים בהמשך הסשן, צריך לשנות את הערך בחזרה ל-off:SET cloudsql_session_read_only = 'off'הגדרת הדגל בחזרה לערך
offמשחזרת את גישת הכתיבה בסשן, אלא אם הדגל מוגדר לערךlocked.SET cloudsql_session_read_only = 'locked'הגדרת הדגל ל-
lockedהופכת את הסשן לקריאה בלבד באופן קבוע. אחרי שהדגל מוגדר לערךlocked, אי אפשר לשנות את הדגל לערך אחר כלשהו למשך הפעלת המשתמש.
כדי להגדיר סשן לקריאה בלבד באופן קבוע ברגע שמתחברים למסד הנתונים, צריך להטמיע את הדגל cloudsql_session_read_only במחרוזת החיבור של הסשן:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?options=-ccloudsql_session_read_only=locked
מחליפים את הפרטים הבאים:
- USER: שם המשתמש של המשתמש שיצר את הסשן.
- PASSWORD: הסיסמה של המשתמש.
- HOST: כתובת ה-URL של המארח.
- PORT: מספר היציאה.
- DATABASE: שם מסד הנתונים.
היתרון הנוסף בגישה הזו הוא שאם מנסים להתחבר לגרסה ישנה יותר של Cloud SQL שלא תומכת בסשנים לקריאה בלבד, החיבור ייכשל.
אפשר גם לשלול ממשתמש מסוים במסד הנתונים את הרשאת הכתיבה לכל החיבורים העתידיים, כך:
ALTER USER USERNAME SET cloudsql_session_read_only = 'locked';
מחליפים את USERNAME בשם המשתמש של המשתמש שרוצים להגביל את הגישה שלו לקריאה בלבד.
הפעלת פונקציות ספציפיות בסשנים לקריאה בלבד
- אתם יכולים לאפשר שימוש ב-
FUNCTIONאו ב-PROCEDUREמסוימים שהוגדרו כ-VOLATILEוגם כ-LANGUAGE Cאו כ-LANGUAGE internal. כדי לעשות זאת, מצרפיםSECURITY LABELלפונקציה או לפרוצדורה שמוגדרות ל-allow. - כדי לאסור שימוש בפונקציה מסוימת בסשן, מגדירים הצהרה
SECURITY LABELלערךdeny. כדי להוסיף לרשימת ההיתרים פונקציות שלא משפיעות על המצב הגלובלי, צריך ליצור קבוצה מוגדרת מראש של תוויות אבטחה:
CREATE EXTENSION "google_read_only_session"התוסף
google_read_only_sessionמאפשר:- כל הפונקציות המובנות של C שמשתנות ושאפשר להשתמש בהן במצב קריאה בלבד.
- כל הפונקציות שמותרות במצב קריאה בלבד שמגיעות מתוספים
שנטענו במסד הנתונים, כולל פונקציות הטיפול בשפות
pl/pgsqlו-pl/v8.
אם מתקינים תוסף חדש אחד או יותר אחרי כן, כדי להחיל תוויות של קבוצות, צריך להסיר את התוסף
google_read_only_sessionוליצור אותו מחדש:> DROP EXTENSION google_read_only_session; > CREATE EXTENSION google_read_only_session;הפקודה
DROPלא מסירה תוויות קיימות. הפקודה השנייהCREATEמוסיפה תוויות לפונקציות C שמשתנות בתוסף החדש.