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