מידע על משתמשים ותפקידים ב-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

      משמש לשכפול.

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

ניהול הזהויות והרשאות הגישה (IAM) משולב עם Cloud SQL בתכונה שנקראת אימות מסד נתונים באמצעות IAM. כשיוצרים מכונות וירטואליות באמצעות התכונה הזו, משתמשי 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 catalog מכילה סיסמאות מגובבות ומאפיינים אחרים של כל התפקידים במסד הנתונים.

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

  • הגדרת שרתי 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, הסיסמאות של המשתמשים מאוחסנות בפורמט מגובב. אפשר להשתמש בדגל password_encryption כדי להגדיר את אלגוריתם ההצפנה ל-md5 או ל-scram-sha-256. האלגוריתם md5 מספק את התאימות הרחבה ביותר, ואילו scram-sha-256 מאובטח יותר אבל יכול להיות שהוא לא תואם ללקוחות ישנים יותר.

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

במאמרי העזרה של PostgreSQL, אפשר גם לעיין במאמרים הבאים:

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