הרשאות פרטניות לבקרת גישה

בדף הזה מתוארות ההרשאות שאפשר להקצות לתפקיד במסד הנתונים לצורך בקרת גישה מפורטת (FGAC). המידע הזה רלוונטי גם למסדי נתונים עם ניב GoogleSQL וגם למסדי נתונים עם ניב PostgreSQL.

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

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

בחירה הוספה עדכון מחיקה EXECUTE שימוש
סכימה ✓
טבלה ✓ ✓ ✓ ✓
עמודה ✓ ✓ ✓ ✓
הצגה ✓
סנכרון שינויים בזרמי נתונים ✓
פונקציית קריאה של סנכרון שינויים בזרמי נתונים ✓
רצף ✓ ✓
דגם ✓

בקטעים הבאים מפורט מידע על כל הרשאה.

SELECT

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

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

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

    אם יוצרים תצוגה עם הרשאות של מפעיל, כדי לשלוח שאילתה לתצוגה, לתפקיד או למשתמש במסד הנתונים צריכה להיות הרשאת SELECT בתצוגה, וגם הרשאת SELECT באובייקטים הבסיסיים שאליהם מפנים בתצוגה. לדוגמה, נניח שהתצוגה SingerNames נוצרה בטבלה Singers.

    CREATE VIEW SingerNames SQL SECURITY INVOKER AS
    SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
    

    נניח שהתפקיד myRole במסד הנתונים מבצע את השאילתה SELECT * FROM SingerNames. לתפקיד צריכה להיות הרשאת SELECT בתצוגה, והרשאת SELECT בשלוש העמודות שאליהן מפנים או בטבלה Singers כולה.

    אם יוצרים תצוגה עם הרשאות של מגדיר, כדי לשלוח שאילתה לתצוגה, התפקיד או המשתמש במסד הנתונים צריכים רק את ההרשאה SELECT בתצוגה. לדוגמה, נניח שהתצוגה AlbumsBudget נוצרה בטבלה Albums.

    CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS
    SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
    

    נניח שהתפקיד Analyst במסד הנתונים מבצע את השאילתה SELECT * FROM AlbumsBudget. לתפקיד נדרשת רק הרשאת SELECT בתצוגה. הוא לא צריך את ההרשאה SELECT בשלוש העמודות שאליהן מפנים או בטבלה Albums.

  • אחרי שמעניקים את ההרשאה SELECT לקבוצת משנה של עמודות בטבלה, המשתמש עם בקרת גישה מפורטת (FGAC) לא יכול יותר להשתמש בהרשאה SELECT * בטבלה הזו. בשאילתות בטבלה הזו צריך לציין את כל העמודות שרוצים לכלול.

  • הרשאת SELECT שניתנה בעמודה שנוצרה לא מעניקה הרשאת SELECT בעמודות הבסיס שעליהן היא מבוססת.

  • בטבלאות משולבות, ההרשאה SELECT שניתנה בטבלת ההורה לא מועברת לטבלת הצאצא.

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

  • כשמשתמשים ב-SELECT עם פונקציית צבירה בעמודות ספציפיות, לדוגמה SUM(col_a), לתפקיד צריכה להיות הרשאת SELECT בעמודות האלה. אם פונקציית הצבירה לא מציינת עמודות, למשל COUNT(*), לתפקיד צריכה להיות ההרשאה SELECT לפחות בעמודה אחת בטבלה.

  • כשמשתמשים ב-SELECT עם רצף, אפשר לראות רק רצפים שיש לכם הרשאות לצפות בהם.

דוגמאות לשימוש ב-GRANT SELECT

GoogleSQL

GRANT SELECT ON TABLE employees TO ROLE hr_director;

GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep;

GRANT SELECT ON VIEW orders_view TO ROLE hr_manager;

GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;

GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;

PostgreSQL

GRANT SELECT ON TABLE employees TO hr_director;

GRANT SELECT ON TABLE customers, orders, items TO account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep;

GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view

GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst;

GRANT SELECT ON SEQUENCE sequence_name TO hr_package;

INSERT

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

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

  • אי אפשר להעניק את ההרשאה INSERT בעמודות שנוצרו.

דוגמאות לשימוש ב-GRANT INSERT

GoogleSQL

GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;

PostgreSQL

GRANT INSERT ON TABLE employees, contractors TO hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;

UPDATE

התפקיד מאפשר לעדכן שורות בטבלאות שצוינו. אפשר להגביל את העדכונים לקבוצת משנה של עמודות בטבלה. כשמשתמשים בהרשאה הזו עם רצפים, היא מאפשרת לתפקיד להפעיל את הפונקציה get-next-sequence-value ברצף.

בנוסף להרשאה UPDATE, התפקיד צריך את ההרשאה SELECT בכל העמודות ששלחתם לגביהן שאילתה. העמודות שנכללות בשאילתה כוללות עמודות בסעיף WHERE.

אי אפשר להעניק את ההרשאה UPDATE בעמודות שנוצרו.

דוגמאות לשימוש ב-GRANT UPDATE

GoogleSQL

GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;

PostgreSQL

GRANT UPDATE ON TABLE employees, contractors TO hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;

DELETE

מאפשרת לתפקיד למחוק שורות מהטבלאות שצוינו.

  • אי אפשר להעניק את ההרשאה DELETE ברמת העמודה.

  • התפקיד צריך גם את ההרשאה SELECT בכל העמודות שעשויות להיכלל בסעיפי WHERE של השאילתה.

  • בטבלאות משולבות במסדי נתונים בניב GoogleSQL, ההרשאה DELETE נדרשת רק בטבלת ההורה. אם בטבלת הצאצא מצוין ON DELETE CASCADE, שורות מטבלת הצאצא נמחקות גם בלי ההרשאה DELETE בטבלת הצאצא.

דוגמה לשימוש ב-GRANT DELETE

GoogleSQL

GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;

PostgreSQL

GRANT DELETE ON TABLE employees, contractors TO hr_admin;

EXECUTE

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

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

דוגמה לשימוש ב-GRANT EXECUTE

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

GoogleSQL

GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;

PostgreSQL

GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;

שימוש

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

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