ניהול משתמשי PostgreSQL באמצעות אימות מובנה

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

יצירת משתמשי PostgreSQL ב-AlloyDB

כשיוצרים משתמשי PostgreSQL, הם מתחילים רק עם ההרשאה LOGIN. מידע נוסף על ההרשאות האלה זמין במאמר CREATE USER.

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

ניהול משתמשים

אתם יכולים ליצור ולנהל משתמשים ב-AlloyDB באמצעות Google Cloud CLI או באמצעות פקודות PostgreSQL. בקטעים הבאים מוסבר איך לבצע משימות נפוצות של ניהול משתמשים בכל אחת מהשיטות.

לפני שמתחילים

כדי להשתמש בפקודות של PostgreSQL לניהול משתמשים באשכול, צריך:

  • גישה אל הלקוח psql
  • גישה למשתמש מסד הנתונים postgres, או לתפקיד משתמש אחר עם הרשאות אדמין מתאימות

כדי להשתמש במסוף Google Cloud או ב-Google Cloud CLI לניהול משתמשים באשכול, לאשכול חייב להיות מכונה ראשית. אם לאשכול אין מכונה ראשית, צריך ליצור אחת כדי לנהל משתמשים.

יצירת משתמש במסד הנתונים

כדי ליצור משתמש במסד נתונים שמאמת את הזהות שלו ישירות מול מסד הנתונים באמצעות שם משתמש וסיסמה, תהליך שנקרא גם אימות מובנה, פועלים לפי השלבים שבקטע הזה.

כדי ליצור משתמש במסד הנתונים שמשתמש בניהול זהויות והרשאות גישה (IAM) לצורך אימות, קראו את המאמר ניהול אימות IAM.

המסוף

  1. נכנסים לדף Clusters.

    כניסה לדף Clusters

  2. לוחצים על שם האשכול שבו רוצים להוסיף משתמש.

  3. לוחצים על Users.

  4. לוחצים על הוספת חשבון משתמש.

  5. משאירים את האפשרות אימות מובנה מסומנת.

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

  6. מזינים שם משתמש וסיסמה למשתמש החדש.

  7. כדי להקצות למשתמש תפקידים אחרים מלבד תפקיד ברירת המחדל alloydbsuperuser:

    1. מזינים את שם התפקיד בשדה Roles.
    2. כדי להוסיף את התפקיד, לוחצים על Enter או על Tab.
    3. לוחצים על x לצד כל תפקיד שרוצים להסיר מהמשתמש הזה.

      מידע נוסף מופיע במאמר תפקידים מוגדרים מראש.

  8. לוחצים על הוספה.

psql

מריצים את הצהרת ה-CREATE USER הבאה:

CREATE USER USERNAME WITH PASSWORD 'PASSWORD';

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫PASSWORD: הסיסמה שרוצים להקצות למשתמש.

למידע נוסף על יצירה והגדרה של משתמשי מסד נתונים, ראו CREATE USER.

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

gcloud

משתמשים בפקודה gcloud alloydb users create הבאה:

gcloud alloydb users create USERNAME \
--password=PASSWORD \
--cluster=CLUSTER_ID \
--region=REGION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים. הערך של USERNAME צריך לעמוד בכללים של מזהי SQL: בלי תווים מיוחדים, או מוקף במירכאות כפולות. לדוגמה, db_user_1.

  • ‫PASSWORD: הסיסמה של המשתמש במסד הנתונים. כדי ליצור את המשתמש בלי סיסמה, משמיטים את הארגומנט הזה.

  • ‫CLUSTER_ID: המזהה של האשכול שאליו רוצים להוסיף את המשתמש.

  • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

אחרי שיוצרים משתמש, אפשר לשנות את ההרשאות שלו באמצעות הפקודה gcloud alloydb users set-roles.

בנוסף, אתם יכולים להקצות תפקידים או הרשאות של משתמש-על למשתמש בזמן שאתם יוצרים אותו. כדי לעשות את זה, צריך לכלול את הארגומנטים --db-roles או --superuser, כמו שמתואר בקטע הבא.

הקצאת תפקידים למשתמש במסד נתונים

המסוף

כדי להקצות תפקידים למשתמש קיים במסד הנתונים במסוף Google Cloud , מתחברים למסד הנתונים באמצעות AlloyDB Studio ומריצים את ההצהרה הבאה ב-GRANT:

GRANT ROLE TO USERNAME;

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫ROLE: התפקיד שרוצים לתת למשתמש. לדוגמה, כדי לתת למשתמש הרשאות של משתמש-על, מקצים לו את התפקיד alloydbsuperuser.

psql

GRANT ROLE TO USERNAME;

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫ROLE: התפקיד שרוצים לתת למשתמש. לדוגמה, כדי לתת למשתמש הרשאות של משתמש-על, מקצים לו את התפקיד alloydbsuperuser.

gcloud

משתמשים בפקודה הבאה gcloud alloydb users set-roles כדי לציין את כל התפקידים שרוצים לתת למשתמש:

gcloud alloydb users set-roles USERNAME \
--db-roles=ROLES \
--cluster=CLUSTER_ID \
--region=REGION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫ROLES: רשימה מופרדת בפסיקים של כל התפקידים שרוצים להקצות למשתמש. מציגים את כל התפקידים, כולל תפקידים קיימים וחדשים.

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

    gcloud alloydb users list --cluster=CLUSTER_ID --region=REGION_ID

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CLUSTER_ID: המזהה של האשכול שמכיל את המשתמש.

    • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

    כדי לתת למשתמש הרשאות של משתמש-על, אפשר להקצות לו באופן ידני את התפקיד alloydbsuperuser באמצעות psql, או להריץ את הפקודה gcloud alloydb users set-superuser עם הארגומנט --superuser=true:

    gcloud alloydb users set-superuser USERNAME \
    --superuser=true \
    --cluster=CLUSTER_ID \
    --region=REGION_ID

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

    • ‫CLUSTER_ID: המזהה של האשכול שמכיל את המשתמש.

    • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

שינוי הסיסמה של משתמש במסד נתונים

כדי להגדיר סיסמה חדשה למשתמש רגיל במסד נתונים של PostgreSQL, פועלים לפי השלבים בקטע הזה.

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

המסוף

  1. נכנסים לדף Clusters.

    כניסה לדף Clusters

  2. לוחצים על שם האשכול שמכיל את משתמש מסד הנתונים.

  3. לוחצים על Users.

  4. בשורה שמייצגת את המשתמש, לוחצים על Open actions for this user.

  5. לוחצים על שינוי הסיסמה.

  6. מציינים סיסמה:

    • כדי להגדיר סיסמה חדשה למשתמש, מזינים את הסיסמה בשדה Password.

    • כדי לא להגדיר סיסמה למשתמש הזה, מסמנים את התיבה No password.

  7. לוחצים על OK.

psql

ALTER USER USERNAME WITH PASSWORD 'PASSWORD';

מידע נוסף על שינוי סיסמה של משתמש זמין במאמר ALTER ROLE.

gcloud

משתמשים בפקודה gcloud alloydb users set-password הבאה:

gcloud alloydb users set-password USERNAME \
--password=PASSWORD \
--cluster=CLUSTER_ID \
--region=REGION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫PASSWORD: הסיסמה החדשה שרוצים להקצות למשתמש.

  • ‫CLUSTER_ID: המזהה של האשכול שהמשתמש שייך אליו.

  • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

ביטול תפקיד של משתמש במסד נתונים

המסוף

כדי לבטל תפקידים של משתמש במסוף Google Cloud , מתחברים למסד הנתונים באמצעות AlloyDB Studio ומריצים את ההצהרה הבאה ב-REVOKE:

REVOKE ROLE FROM USERNAME;

מחליפים את מה שכתוב בשדות הבאים:

  • ‫ROLE: התפקיד שרוצים לבטל למשתמש. כדי להסיר את הרשאות משתמש-העל של משתמש, צריך לבטל את התפקיד alloydbsuperuser של אותו משתמש.

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

psql

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

REVOKE ROLE FROM USERNAME;

כדי להסיר את הרשאות משתמש-העל של משתמש, צריך לבטל את התפקיד alloydbsuperuser של אותו משתמש.

gcloud

כדי לבטל תפקיד באמצעות Google Cloud CLI, משתמשים בפקודה הבאה של gcloud alloydb users set-roles כדי לציין את כל התפקידים שרוצים להקצות למשתמש, ולהשמיט את התפקידים שרוצים לבטל:

gcloud alloydb users set-roles USERNAME \
--db-roles=ROLES \
--cluster=CLUSTER_ID \
--region=REGION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫ROLES: רשימה מופרדת בפסיקים של כל התפקידים שרוצים להקצות למשתמש. מציגים את כל התפקידים, כולל תפקידים קיימים וחדשים.

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

    gcloud alloydb users list --cluster=CLUSTER_ID --region=REGION_ID
  • ‫CLUSTER_ID: המזהה של האשכול שמכיל את המשתמש.

  • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

כדי לבטל הרשאות של משתמש-על, אתם יכולים להסיר באופן ידני את התפקיד alloydbsuperuser של המשתמש באמצעות psql, או להריץ את הפקודה gcloud alloydb users set-superuser עם הארגומנט --superuser=false.

הצגת רשימה של משתמשי מסד הנתונים

המסוף

  1. נכנסים לדף Clusters.

    כניסה לדף Clusters

  2. לוחצים על השם של האשכול שרוצים לראות את המשתמשים שלו.

  3. לוחצים על Users.

psql

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

\du

gcloud

משתמשים בפקודה gcloud alloydb users list הבאה:

gcloud alloydb users list \
--cluster=CLUSTER_ID \
--region=REGION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_ID: המזהה של האשכול שמכיל את המשתמשים.

  • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

הסרת תלויות של משתמשים

כדי למחוק משתמש ממסד נתונים, צריך להסיר את כל האובייקטים במסד הנתונים שבבעלות המשתמש הזה ולבטל את כל ההרשאות שניתנו לו. אחרת, ניסיון המחיקה ייכשל ותופיע הודעת שגיאה (לדוגמה, ERROR: role "username" cannot be dropped because some objects depend on it).

כדי לזהות ולהסיר את יחסי התלות האלה, מתחברים למסד הנתונים באמצעות הלקוח psql בתור המשתמש postgres או כל חשבון עם התפקיד alloydbsuperuser, ומבצעים את השלבים הבאים לכל מסד נתונים באשכול:

  1. מריצים את השאילתה הבאה כדי להציג את האובייקטים, כמו טבלאות, תצוגות, סכימות ומסדי נתונים, שבבעלות המשתמש שרוצים למחוק:

    SELECT
        n.nspname AS schema_name,
        c.relname AS object_name,
        CASE c.relkind
          WHEN 'r' THEN 'table'
          WHEN 'v' THEN 'view'
          WHEN 'm' THEN 'materialized view'
          WHEN 'i' THEN 'index'
          WHEN 'S' THEN 'sequence'
          WHEN 't' THEN 'TOAST table'
          WHEN 'f' THEN 'foreign table'
          WHEN 'p' THEN 'partitioned table'
          WHEN 'I' THEN 'partitioned index'
        END as object_type
    FROM pg_catalog.pg_class c
    JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
    WHERE pg_catalog.pg_get_userbyid(c.relowner) = 'USERNAME'
      AND n.nspname NOT IN ('pg_catalog', 'information_schema')
      AND n.nspname !~ '^pg_toast';
    

    מחליפים את USERNAME בשם המשתמש שרוצים למחוק.

  2. צריך לשנות את הבעלות על כל אחד מהאובייקטים שזוהו.

    • כדי לשנות את הבעלים של טבלה או תצוגה:

      ALTER TABLE SCHEMA_NAME.OBJECT_NAME OWNER TO NEW_OWNER;
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫SCHEMA_NAME: שם הסכימה שמכילה את הטבלה או התצוגה.

      • ‫OBJECT_NAME: שם הטבלה או התצוגה.

      • ‫NEW_OWNER: שם המשתמש של המשתמש שרוצים להעניק לו בעלות.

    • כדי לשנות את הבעלים של מסד נתונים:

      ALTER DATABASE DATABASE_NAME OWNER TO NEW_OWNER;
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫DATABASE_NAME: שם מסד הנתונים.

      • ‫NEW_OWNER: שם המשתמש של המשתמש שרוצים להעניק לו בעלות.

  3. לזהות ולבטל הרשאות. יכול להיות שלמשתמש יש גם הרשאות שניתנו לאובייקטים אחרים, או חברויות בתפקידים שמונעות את המחיקה.

    • כדי להציג את רשימת התפקידים של המשתמש:

      WITH RECURSIVE cte AS (
      SELECT oid ,oid as member_of,1 as d,''::name as path FROM pg_roles r where r.rolname !~ '^pg_'
          UNION
          SELECT m.roleid,m.member as member_of ,d+1,path||'->'||pg_get_userbyid(cte.oid) as path
          FROM cte
          JOIN pg_auth_members m ON m.member = cte.oid where d<15
      )
      SELECT
      DISTINCT pg_get_userbyid(member_of)::varchar AS username,
      pg_get_userbyid(oid)::varchar as parent_role,
      d::int as depth, substr(path::text||'->'||pg_get_userbyid(oid),3) as path
      FROM cte
      WHERE d > 1
      ORDER BY depth;
      
    • כדי לבטל חברות בתפקיד:

      REVOKE ROLE_NAME FROM USERNAME;
      

      מחליפים את מה שכתוב בשדות הבאים:

      • ‫ROLE_NAME: החברות בתפקיד שרוצים לבטל.

      • ‫USERNAME: שם המשתמש שאת התפקיד שלו רוצים לבטל.

    • כדי לבטל הרשאות בטבלה:

      1. מקצים את התפקיד "בעלי הטבלה" למשתמש שמריץ את השאילתה:

        GRANT TABLE_OWNER TO EXECUTOR_USER;
        

        מחליפים את מה שכתוב בשדות הבאים:

        • ‫TABLE_OWNER: שם המשתמש או התפקיד שהטבלה בבעלותו.

        • ‫EXECUTOR_USER: שם המשתמש של המשתמש שמבצע את הפעולה, לדוגמה postgres.

      2. מבטלים את ההרשאות בטבלה:

        REVOKE ALL PRIVILEGES ON TABLE SCHEMA_NAME.TABLE_NAME FROM USERNAME;
        

        מחליפים את מה שכתוב בשדות הבאים:

        • ‫SCHEMA_NAME: שם הסכימה שמכילה את הטבלה.

        • ‫TABLE_NAME: שם הטבלה.

        • ‫USERNAME: שם המשתמש שאת ההרשאות שלו רוצים לבטל.

מחיקת משתמש במסד נתונים

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

המסוף

  1. נכנסים לדף Clusters.

    כניסה לדף Clusters

  2. לוחצים על שם האשכול שבו נמצא המשתמש.

  3. לוחצים על Users.

  4. בשורה שמייצגת את המשתמש, לוחצים על Open actions for this user.

  5. לוחצים על הסרה.

  6. בתיבת הדו-שיח להסיר את חשבון המשתמש?, לוחצים על הסרה.

psql

מומלץ להשתמש במשאבים הבאים:

DROP ROLE USERNAME;

gcloud

משתמשים בפקודה gcloud alloydb users delete הבאה:

gcloud alloydb users delete USERNAME \
--cluster=CLUSTER_ID \
--region=REGION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש של המשתמש במסד הנתונים.

  • ‫CLUSTER_ID: המזהה של האשכול שהמשתמש שייך אליו.

  • ‫REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה, us-central1.

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