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

בדף הזה מתוארות ההרשאות שאפשר להעניק לתפקיד במסד נתונים לצורך בקרת גישה ברמת גרנולריות גבוהה. המידע הזה רלוונטי גם למסדי נתונים של ניב 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 מוענקת כברירת מחדל לסכימה שמוגדרת כברירת מחדל.

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