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