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

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

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