בדף הזה מוסבר איך ליצור, לנהל ולהסיר תפקידים, משתמשים וקבוצות ב-PostgreSQL וב-AlloyDB ל-PostgreSQL באמצעות שיטות האימות המובנות של 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.
המסוף
עוברים לדף Clusters.
לוחצים על שם האשכול שרוצים להוסיף אליו משתמש.
לוחצים על Users.
לוחצים על הוספת חשבון משתמש.
משאירים את האפשרות אימות מובנה מסומנת.
אם רוצים להשתמש ב-IAM כדי לאמת את אשכולות מסדי הנתונים ולהיכנס אליהם, צריך לבצע שלבים נוספים כדי להכין את הפרויקט ולהעניק הרשאות מתאימות למשתמש החדש. מידע נוסף זמין במאמר ניהול אימות IAM.
מזינים שם משתמש וסיסמה למשתמש החדש.
כדי להקצות למשתמש תפקידים אחרים מלבד תפקיד ברירת המחדל
alloydbsuperuser, פועלים לפי השלבים הבאים:- מזינים את שם התפקיד בתפקידים.
- כדי להוסיף את התפקיד, מקישים על Enter או על Tab.
לוחצים על x לצד כל תפקיד שרוצים להסיר מהמשתמש.
מידע נוסף מופיע במאמר בנושא תפקידים מוגדרים מראש.
לוחצים על הוספה.
psql
CREATE USER USERNAME WITH PASSWORD 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, כמו שמתואר בקטע הבא.
הקצאת תפקידים למשתמש במסד נתונים
המסוף
כדי להקצות תפקידים למשתמש במסד נתונים, צריך להשתמש ב-psql או ב-CLI של gcloud, ולא במסוף Google Cloud .
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מחליפים את המשתנים הבאים:
CLUSTER_ID: המזהה של האשכול שמכיל את המשתמש.
REGION_ID: המזהה של האזור שבו נמצא האשכול. לדוגמה,us-central1.
שינוי הסיסמה של משתמש במסד נתונים
כדי להגדיר סיסמה חדשה למשתמש רגיל במסד נתונים של PostgreSQL, פועלים לפי השלבים שמפורטים בקטע הזה.
אי אפשר לשנות או להגדיר את הסיסמה של משתמש שמבוסס על IAM כי משתמשי IAM לא משתמשים בסיסמאות כדי לבצע אימות. מידע נוסף זמין במאמר חיבור באמצעות חשבון IAM.
המסוף
עוברים לדף Clusters.
לוחצים על שם האשכול שמכיל את משתמש מסד הנתונים.
לוחצים על Users.
בשורה שמייצגת את המשתמש, לוחצים על פתיחת פעולות עבור המשתמש הזה.
לוחצים על שינוי הסיסמה.
מציינים סיסמה:
כדי להגדיר סיסמה חדשה למשתמש, מקלידים את הסיסמה בשדה סיסמה.
כדי לא להגדיר סיסמה למשתמש הזה, מסמנים את התיבה ללא סיסמה.
לוחצים על 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.
ביטול תפקיד של משתמש במסד נתונים
המסוף
כדי לבטל תפקידים של משתמש, צריך להשתמש ב-psql או ב-CLI של gcloud במקום במסוף Google Cloud .
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.
הצגת רשימה של משתמשי מסד נתונים
המסוף
עוברים לדף Clusters.
לוחצים על שם האשכול שרוצים לראות את המשתמשים שלו.
לוחצים על 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, ומבצעים את השלבים הבאים לכל מסד נתונים באשכול:
מריצים את השאילתה הבאה כדי לקבל רשימה של האובייקטים, כמו טבלאות, תצוגות, סכימות ומסדי נתונים שבבעלות המשתמש שרוצים למחוק:
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בשם המשתמש שרוצים למחוק.עבור האובייקטים שזוהו, צריך לשנות את הבעלות על כל אובייקט.
כדי לשנות את הבעלים של טבלה או תצוגה:
ALTER TABLE SCHEMA_NAME.OBJECT_NAME OWNER TO NEW_OWNER;מחליפים את מה שכתוב בשדות הבאים:
-
NEW_OWNER: שם המשתמש של המשתמש שרוצים להעניק לו בעלות.
-
כדי לשנות את הבעלים של מסד נתונים:
ALTER DATABASE DATABASE_NAME OWNER TO NEW_OWNER;
זיהוי וביטול של הרשאות. יכול להיות שלמשתמש יש גם הרשאות שניתנו לו באובייקטים אחרים, או חברות בתפקידים שמונעות את המחיקה.
כדי להציג את התפקידים שהמשתמש משויך אליהם:
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 בחברות בתפקיד שרוצים לבטל.
כדי לבטל הרשאות בטבלה:
מעניקים למשתמש המריץ את התפקיד של בעלים של הטבלה:
GRANT TABLE_OWNER TO EXECUTOR_USER;מחליפים את מה שכתוב בשדות הבאים:
-
TABLE_OWNER: שם המשתמש או התפקיד שבבעלותם הטבלה. -
EXECUTOR_USER: שם המשתמש של המשתמש שמריץ את הפקודה. לדוגמה,postgres.
-
מבטלים את ההרשאות בטבלה:
REVOKE ALL PRIVILEGES ON TABLE SCHEMA_NAME.TABLE_NAME FROM USERNAME;מחליפים את מה שכתוב בשדות הבאים:
-
SCHEMA_NAME: השם של הסכימה שמכילה את הטבלה. -
TABLE_NAME: שם הטבלה. -
USERNAME: שם המשתמש שרוצים לבטל את ההרשאות שלו.
-
מחיקה של משתמש במסד נתונים
לפני שמוחקים משתמש, צריך להסיר או להקצות מחדש את כל האובייקטים שבבעלותו, ולבטל את כל ההרשאות שניתנו למשתמש באובייקטים אחרים. פרטים נוספים מופיעים במאמר בנושא הסרת תלות של משתמשים.
המסוף
עוברים לדף Clusters.
לוחצים על שם האשכול שכולל את המשתמש.
לוחצים על Users.
בשורה שמייצגת את המשתמש, לוחצים על פתיחת פעולות עבור המשתמש הזה.
בוחרים באפשרות הסרה.
בתיבת הדו-שיח Remove user account? (הסרת חשבון משתמש?), לוחצים על Remove (הסרה).
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.