מידע על משתמשים ותפקידים ב-PostgreSQL

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

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

ההבדל בין משתמשים לתפקידים

תפקידים ב-PostgreSQL יכולים להיות תפקיד יחיד או קבוצה של תפקידים. משתמש הוא תפקיד עם יכולת להתחבר (לתפקיד יש את המאפיין LOGIN). בגלל שלכל התפקידים שנוצרים ב-Cloud SQL יש את המאפיין LOGIN, ב-Cloud SQL משתמשים במונחים תפקיד ומשתמש באופן חלופי. עם זאת, אם יוצרים תפקיד באמצעות הלקוח psql, לתפקיד לא בהכרח יהיה המאפיין LOGIN.

לכל משתמשי PostgreSQL חייבת להיות סיסמה. אי אפשר להתחבר עם משתמש שאין לו סיסמה.

הגבלות והרשאות של משתמשי-על

‫Cloud SQL ל-PostgreSQL הוא שירות מנוהל, ולכן הוא מגביל את הגישה לטבלאות ולהליכי מערכת מסוימים שנדרשות בשבילם הרשאות מתקדמות. ב-Cloud SQL לקוחות לא יכולים ליצור משתמשים עם מאפיינים של משתמש-על או לקבל גישה אליהם.

אי אפשר ליצור משתמשי מסד נתונים עם הרשאות של משתמש-על. עם זאת, אתם יכולים ליצור משתמשים במסד הנתונים עם התפקיד cloudsqlsuperuser, שיש לו כמה הרשאות של משתמש-על, כולל:

  • יצירת תוספים שדורשים הרשאות של משתמש-על.
  • יצירת טריגרים של אירועים.
  • יצירת משתמשי רפליקציה.
  • יצירת פרסומים ומינויים של רפליקציה.
  • ביצוע ההצהרות CREATE CAST ו-DROP CAST כמשתמש במסד הנתונים עם התפקיד cloudsqlsuperuser. עם זאת, למשתמש הזה צריכה להיות ההרשאה USAGE גם בסוגי הנתונים של המקור וגם בסוגי הנתונים של היעד. לדוגמה, משתמש יכול ליצור המרה שמשנה את סוג הנתונים של המקור int לסוג הנתונים של היעד boolean.

  • גישה מלאה לטבלת הקטלוג של pg_largeobject.

משתמשי ברירת המחדל של PostgreSQL

כשיוצרים מכונה חדשה של Cloud SQL ל-PostgreSQL, נוצר משתמש האדמין שמוגדר כברירת מחדל postgres, אבל לא נוצרת הסיסמה שלו. כדי להתחבר, צריך להגדיר סיסמה למשתמש הזה. אפשר לעשות את זה במסוף Google Cloud או באמצעות הפקודה הבאה של gcloud:

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

המשתמש postgres הוא חלק מהתפקיד cloudsqlsuperuser, ויש לו את המאפיינים (הרשאות) הבאים: CREATEROLE, CREATEDB ו-LOGIN. אין לו את המאפיינים SUPERUSER או REPLICATION.

נוצר משתמש cloudsqlimportexport כברירת מחדל עם קבוצת ההרשאות המינימלית שנדרשת לפעולות ייבוא וייצוא של קובצי CSV. אתם יכולים ליצור משתמשים משלכם כדי לבצע את הפעולות האלה, אבל אם לא תעשו זאת, ייעשה שימוש במשתמש ברירת המחדל של cloudsqlimportexport. המשתמש cloudsqlimportexport הוא משתמש מערכת, ואי אפשר להשתמש בו ישירות.

משתמשי מערכת ותפקידים ב-Cloud SQL

ב-Cloud SQL משתמשים בתפקידים ובמשתמשים של המערכת כדי לתמוך בתכונות של Cloud SQL. אי אפשר למחוק או לשנות את התפקידים או המשתמשים של מערכת Cloud SQL. אי אפשר להקצות תפקידי מערכת למשתמשי מסד נתונים, חוץ מהתפקיד cloudsqlsuperuser. אי אפשר להקצות תפקידים במסד הנתונים למשתמשי מערכת.

  • תפקידי מערכת

    • cloudsqliamgroup

      משמש לציון חשבון אימות של קבוצת IAM ללא התחברות, שמשמש לאימות של קבוצת IAM.

    • cloudsqlinactiveuser

      משמש לסימון חשבון אימות של קבוצת IAM כלא פעיל.

    • cloudsqliamgroupserviceaccount

      משמש לציון חשבון שירות ב-IAM שמאומת באמצעות אימות קבוצתי ב-IAM.

    • cloudsqliamgroupuser

      משמש לציון משתמש IAM שמאומת באמצעות אימות קבוצתי של IAM.

    • cloudsqliamserviceaccount

      משמש לציון חשבון שירות של IAM שמאומת באמצעות אימות מסד נתונים של IAM.

    • cloudsqliamuser

      משמש לציון משתמש IAM שמאומת באמצעות אימות מסד נתונים של IAM.

    • cloudsqlsuperuser

      תפקיד שמוענק למשתמשים עם הרשאות מוגבלות של משתמשי-על. התפקיד cloudsqlsuperuser מוקצה באופן אוטומטי למשתמשי PostgreSQL חדשים שמשתמשים באימות מובנה.

  • משתמשי מערכת

    • cloudsqladmin

      משתמש מערכת עם הרשאות של משתמש-על במסד הנתונים.

    • cloudsqlagent

      משמש למעקב אחרי מסדי נתונים.

    • cloudsqlconnpooladmin

      משמש למאגר חיבורים מנוהל.

    • cloudsqlimportexport

      משמש לייבוא וייצוא של נתונים.

    • cloudsqllogical

      משמש ליצירת רפליקציה לוגית.

    • cloudsqlobservability

      משמשת לתצפית על מסד הנתונים, כמו הכלי לייעוץ בנושא אינדקסים ושאילתות פעילות.

    • cloudsqlreplica

      משמש לשכפול.

משתמשי Cloud SQL IAM לאימות IAM

התכונה אימות של מסד נתונים באמצעות IAM משלבת את ניהול הזהויות והרשאות הגישה (IAM) עם Cloud SQL. כשיוצרים מכונות באמצעות התכונה הזו, משתמשי IAM יכולים להיכנס למכונה באמצעות שמות המשתמשים והסיסמאות שלהם ב-IAM. היתרון בשימוש באימות של IAM הוא שאפשר להשתמש בפרטי הכניסה הקיימים של המשתמש ב-IAM כשנותנים לו גישה למסד נתונים. כשהמשתמש עוזב את הארגון, חשבון ה-IAM שלו מושעה והגישה שלו מוסרת באופן אוטומטי.

משתמשים אחרים ב-PostgreSQL

אתם יכולים ליצור משתמשים או תפקידים אחרים ב-PostgreSQL. משתמשים שנוצרו באמצעות Cloud SQL ולא באמצעות IAM נוצרים כחלק מהתפקיד cloudsqlsuperuser, ויש להם את אותה קבוצת מאפיינים כמו למשתמש postgres: CREATEROLE,‏ CREATEDB ו-LOGIN. אפשר לשנות את המאפיינים של כל משתמש באמצעות הפקודה ALTER ROLE.

אם יוצרים משתמש חדש באמצעות הלקוח psql, אפשר לשייך אותו לתפקיד אחר או לתת לו מאפיינים אחרים.

תפקידים ב-PostgreSQL

אתם יכולים ליצור תפקידים בהתאמה אישית ב-PostgreSQL כדי לארגן ולהקצות הרשאות למסד הנתונים למשתמשי PostgreSQL. כשיוצרים מכונה של Cloud SQL, אפשר להשתמש בתפקידים כדי לתת למשתמשים הרשאות ראשוניות למסד הנתונים.

מידע נוסף על יצירת תפקידים ושימוש בהם ב-PostgreSQL זמין במאמר תפקידים במסד נתונים.

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

נתיב חיפוש מאובטח

כדי למנוע חטיפה של נתיב החיפוש, ודאו שהפרמטר search_path של משתמשים עם הרשאות גבוהות מוגדר ל-pg_catalog. כך אפשר לוודא שנתיב החיפוש מאובטח ושהמערכת עוקפת סכימות לא מהימנות כמו public.

כדי להגדיר את זה באופן קבוע למשתמש, מריצים את הפקודה הבאה:

ALTER ROLE <var>USER_NAME</var> SET search_path = pg_catalog;

כדי להגדיר אותו לסשן הנוכחי, מריצים את הפקודה הבאה:

SET search_path TO pg_catalog;

למידע נוסף, קראו את המסמכים של PostgreSQL בנושא שימוש מאובטח בסכימה ואת המדריך בנושא CVE-2018-1058.

משתמשי IAM ותפקידים במסד הנתונים

כשיוצרים חשבון משתמש ב-IAM ב-Cloud SQL ל-PostgreSQL ולא מקצים לו תפקידים במסד הנתונים, המשתמש לא מקבל תפקידים במסד הנתונים באופן אוטומטי.

אתם יכולים להקצות את התפקיד cloudsqlsuperuser ותפקידים בהתאמה אישית במסד הנתונים למשתמשים, לחשבונות שירות או לקבוצות ב-IAM, על ידי הקצאת תפקידים במסד הנתונים כשאתם יוצרים או מעדכנים את החשבונות ב-IAM במכונה.

מידע נוסף על הקצאת תפקידים למשתמשי IAM זמין במאמר הקצאת תפקידים במסד הנתונים בזמן הוספת חשבון IAM למכונה.

גישה לתצוגה pg_shadow ולטבלה pg_authid

אתם יכולים להשתמש בתצוגה pg_shadow כדי לעבוד עם מאפייני התפקידים שמסומנים כ-rolcanlogin בטבלת הקטלוג pg_authid.

התצוגה pg_shadow מכילה סיסמאות מגובבות ומאפיינים אחרים של התפקידים (המשתמשים) שמורשים להתחבר לאשכול. טבלת הקטלוג pg_authid מכילה סיסמאות מגובבות ומאפיינים אחרים לכל התפקידים במסד הנתונים.

ב-Cloud SQL, לקוחות לא יכולים לגשת לתצוגה pg_shadow או לטבלה pg_authid באמצעות הרשאות ברירת המחדל. עם זאת, הגישה לשמות התפקידים ולסיסמאות המגובבות שימושית במצבים מסוימים, כולל:

  • הגדרת שרתי proxy או איזון עומסים עם משתמשים וסיסמאות קיימים
  • העברת משתמשים בלי לשנות את הסיסמאות שלהם
  • הטמעת פתרונות מותאמים אישית לניהול מדיניות הסיסמאות

הגדרת הדגלים לתצוגה pg_shadow ולטבלה pg_authid

כדי לגשת לתצוגה pg_shadow, צריך להגדיר את הדגל cloudsql.pg_shadow_select_role לשם של תפקיד ב-PostgreSQL. כדי לגשת לטבלה pg_authid, צריך להגדיר את הדגל cloudsql.pg_authid_select_role לשם של תפקיד ב-PostgreSQL.

אם cloudsql.pg_shadow_select_role קיים, יש לו גישת קריאה בלבד (SELECT) לתצוגה pg_shadow. אם cloudsql.pg_authid_select_role קיים, יש לו גישה מסוג SELECT לטבלה pg_authid.

אם אחד מהתפקידים לא קיים, להגדרות אין השפעה, אבל לא מתרחשת שגיאה. עם זאת, שגיאה נרשמת ביומן כשמשתמש מנסה לגשת לתצוגה או לטבלה. השגיאה מתועדת ביומן של מסד הנתונים של PostgreSQL: ‏cloudsql.googleapis.com/postgres.log. למידע נוסף על הצגת היומן הזה, ראו הצגת יומני מכונות.

מוודאים שהתפקידים שהוגדרו קיימים ושאין שגיאת הקלדה בערך של הדגל cloudsql.pg_shadow_select_role או של הדגל cloudsql.pg_authid_select_role. אפשר גם להשתמש בפונקציה pg_has_role כדי לוודא שמשתמש מסוים הוא חבר בתפקידים האלה. מידע על הפונקציה הזו זמין בדף פונקציות ואופרטורים של מידע על המערכת.

אתם יכולים להשתמש בדגל cloudsql.pg_shadow_select_role או בדגל cloudsql.pg_authid_select_role עם חברות בתפקיד ב-PostgreSQL כדי לנהל את הגישה של כמה משתמשים ל-pg_shadow או ל-pg_authid.

שינויים באחד מהדגלים לא מחייבים הפעלה מחדש של מסד הנתונים.

מידע נוסף על דגלים נתמכים זמין במאמר הגדרת דגלים של מסדי נתונים.

בחירת פורמט לאחסון סיסמאות

ב-Cloud SQL ל-PostgreSQL, סיסמאות המשתמשים נשמרות בפורמט גיבוב (hash). אפשר להשתמש בדגל password_encryption כדי להגדיר את אלגוריתם ההצפנה ל-md5 או ל-scram-sha-256. האלגוריתם md5 מספק את התאימות הרחבה ביותר, ואילו scram-sha-256 מאובטח יותר אבל יכול להיות שלא יהיה תואם ללקוחות ישנים יותר.

כשמאפשרים גישה ל-pg_shadow כדי לייצא מאפייני תפקידים ממכונה של Cloud SQL, כדאי להשתמש באלגוריתם הכי מאובטח שהלקוחות שלכם תומכים בו.

במסמכי התיעוד של PostgreSQL, אפשר גם לעיין במאמרים הבאים:

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