שימוש באבטחה ברמת השורה עם תכונות אחרות של BigQuery
במאמר הזה מוסבר איך להשתמש באבטחת גישה ברמת השורה עם תכונות אחרות של BigQuery.
לפני שקוראים את המאמר הזה, מומלץ לקרוא את המאמרים מבוא לאבטחה ברמת השורה ב-BigQuery ועבודה עם אבטחה ברמת השורה כדי להכיר את הנושא.
המסנן TRUE
מדיניות גישה ברמת השורה יכולה לסנן את נתוני התוצאות שאתם רואים כשאתם מריצים שאילתות. כדי להפעיל פעולות שאינן שאילתות, כמו DML, צריך גישה מלאה לכל השורות בטבלה. גישה מלאה ניתנת באמצעות מדיניות גישה לשורות עם ביטוי המסנן שמוגדר ל-TRUE. מדיניות הגישה ברמת השורה הזו נקראת מסנן TRUE.
אפשר להעניק לכל משתמש גישה לסינון, כולל לחשבון שירות.TRUE
דוגמאות לפעולות שאינן שאילתות:
- ממשקי API אחרים של BigQuery, כמו BigQuery Storage Read API.
- חלק מהפקודות של
bqכלי שורת הפקודה, כמו הפקודהbq head. - העתקת טבלה
TRUE דוגמה למסנן
CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);
תכונות שפועלות עם המסנן TRUE
כשמשתמשים בפעולת DML בטבלה שמוגנת על ידי מדיניות גישה לשורות, צריך להשתמש במסנן TRUE, שמשמעותו גישה לכל הטבלה. כל הפעולות שלא משנות את סכימת הטבלה שומרות על כללי מדיניות הגישה לשורות בטבלה.
לדוגמה, ההצהרה ALTER TABLE RENAME
TO מעתיקה את מדיניות הגישה לשורות מהטבלה המקורית לטבלה החדשה.
דוגמה נוספת: ההצהרה TRUNCATE
TABLE מסירה את כל השורות מטבלה, אבל שומרת את סכימת הטבלה ואת כללי המדיניות לגבי גישה לשורות.
העתקת משימות
כדי להעתיק טבלה עם כללי מדיניות של גישה ברמת השורה, צריך קודם לקבל הרשאת גישה למסנן TRUE בטבלת המקור. כל מדיניות הגישה ברמת השורה בטבלת המקור מועתקת גם לטבלת היעד החדשה. אם מעתיקים טבלת מקור ללא מדיניות גישה ברמת השורה לטבלת יעד שיש בה מדיניות גישה ברמת השורה, מדיניות הגישה ברמת השורה מוסרת מטבלת היעד, אלא אם משתמשים בדגל --append_table או מגדירים את "writeDisposition": "WRITE_APPEND".
מותר להעתיק בין אזורים, וכללי המדיניות מועתקים. יכול להיות ששאילתות עוקבות ייכשלו אחרי שההעתקה תושלם, אם השאילתות מכילות הפניות לא חוקיות לטבלאות במדיניות של שאילתות משנה.
לכללי מדיניות לגישה ברמת השורה בטבלה צריך להיות שם ייחודי. התנגשות בשמות של מדיניות גישה ברמת השורה במהלך ההעתקה גורמת לשגיאת קלט לא תקין.
ההרשאות שנדרשות כדי להעתיק טבלה עם מדיניות גישה ברמת השורה
כדי להעתיק טבלה עם מדיניות גישה ברמת השורה, אתם צריכים את ההרשאות הבאות, בנוסף לתפקידים להעתקת טבלאות ומחיצות.
| הרשאה | משאב |
|---|---|
bigquery.rowAccessPolicies.list
|
טבלת המקור. |
bigquery.rowAccessPolicies.getIamPolicy
|
טבלת המקור. |
המסנן TRUE
|
טבלת המקור. |
bigquery.rowAccessPolicies.create
|
טבלת היעד. |
bigquery.rowAccessPolicies.setIamPolicy
|
טבלת היעד. |
Tabledata.list ב-BigQuery API
כדי להשתמש ב-method tabledata.list ב-BigQuery API בטבלה עם מדיניות גישה ברמת השורה, אתם צריכים הרשאת גישה למסנן TRUE.
DML
כדי להריץ פקודת DML שמעדכנת טבלה עם מדיניות גישה ברמת השורה, צריך TRUE גישה לסינון של הטבלה.
באופן ספציפי, MERGE statements מתקשרים עם מדיניות גישה ברמת השורה באופן הבא:
- אם טבלת היעד מכילה מדיניות גישה ברמת השורה, צריך להגדיר
TRUEגישה לסינון של טבלת היעד. - אם טבלת המקור מכילה מדיניות גישה ברמת השורה, ההצהרה
MERGEפועלת רק על השורות שגלויות למשתמש.
תמונות מצב של טבלאות
תמונות מצב של טבלאות תומכות באבטחה ברמת השורה. ההרשאות שנדרשות לטבלת הבסיס (טבלת המקור) ולתמונת המצב של הטבלה (טבלת היעד) מתוארות במאמר הרשאות שנדרשות להעתקת טבלה עם מדיניות גישה ברמת השורה.
טבלה ב-BigQuery עם עמודות JSON
אי אפשר להחיל מדיניות גישה ברמת השורה על עמודות JSON. מידע נוסף על המגבלות של אבטחה ברמת השורה זמין במאמר מגבלות.
BigQuery BI Engine ו-Looker Studio
BigQuery BI Engine לא מאיץ שאילתות שמופעלות בטבלאות עם מדיניות גישה ברמת השורה אחת או יותר. השאילתות האלה מופעלות כשאילתות רגילות ב-BigQuery.
הנתונים בלוח הבקרה של Looker Studio מסוננים בהתאם למדיניות הגישה ברמת השורה של טבלת המקור הבסיסית.
אבטחה ברמת העמודה
אבטחה ברמת השורה ואבטחה ברמת העמודה, שכוללת גם בקרת גישה ברמת העמודה וגם הסתרת נתונים דינמית, תואמות באופן מלא.
נקודות עיקריות:
- אתם יכולים להחיל מדיניות גישה ברמת השורה כדי לסנן נתונים בכל עמודה, גם אם אין לכם גישה לנתונים בעמודה הזו.
- ניסיונות לגשת לעמודות האלה באמצעות מדיניות הגישה ברמת השורה של שאילתת המשנה יובילו לשגיאה שמציינת שהגישה נדחתה. העמודות האלה לא נחשבות לעמודות עם הפניה למערכת.
- ניסיונות לגשת לעמודות האלה באמצעות מדיניות גישה ברמת השורה שאינה שאילתת משנה, עוקפים את האבטחה ברמת העמודה.
- אם הגישה לעמודה מוגבלת בגלל אבטחה ברמת העמודה, והעמודה מצוינת בהצהרת
SELECTשל השאילתה או במדיניות גישה ברמת השורה של שאילתת המשנה, תוצג שגיאה. - אבטחה ברמת העמודה חלה גם על הצהרת שאילתה
SELECT *. המערכת מתייחסת ל-SELECT *כמו לשאילתה שמציינת באופן מפורש עמודה מוגבלת.
דוגמה לאינטראקציה בין אבטחה ברמת השורה לבין אבטחה ברמת העמודה
בדוגמה הזו מוסבר איך לאבטח טבלה ואז לשלוח אליה שאילתה.
הנתונים
נניח שיש לכם תפקיד DataOwner במערך נתונים בשם my_dataset שכולל טבלה עם שלוש עמודות בשם my_table.
הטבלה מכילה את הנתונים שמוצגים בטבלה הבאה.
בדוגמה הזו, אחד המשתמשים הוא Alice, וכתובת האימייל שלה היא alice@example.com. משתמש שני הוא בוב, הקולגה של אליס.
| rank | fruit | color |
|---|---|---|
| 1 | apple | אדום |
| 2 | כתום | כתום |
| 3 | צהוב ליים | ירוק |
| 4 | לימון | צהוב |
האבטחה
אתם רוצים שאליס תוכל לראות את כל השורות עם מספרים אי-זוגיים בעמודה rank, אבל לא את השורות עם מספרים זוגיים. אתם לא רוצים שדני יראה שורות,
גם לא שורות זוגיות וגם לא שורות אי-זוגיות. אתם לא רוצים שאף אחד יוכל לראות את הנתונים בעמודה fruit.
כדי להגביל את הגישה של אליס לשורות עם מספרים זוגיים, יוצרים מדיניות גישה ברמת השורה עם ביטוי סינון שמבוסס על הנתונים שמופיעים בעמודה
rank. כדי למנוע מבועז לראות שורות זוגיות או אי-זוגיות, לא כוללים אותו ברשימת מקבלי ההרשאה.CREATE ROW ACCESS POLICY only_odd ON my_dataset.my_table GRANT TO ('user:alice@example.com') FILTER USING (MOD(rank, 2) = 1);כדי להגביל את כל המשתמשים כך שלא יוכלו לראות את הנתונים בעמודה בשם
fruit, יוצרים תג מדיניות לאבטחה ברמת העמודה שאוסר על כל המשתמשים לגשת לנתונים בעמודה.
לבסוף, אתם גם מגבילים את הגישה לעמודה בשם color בשתי דרכים:
העמודה נשלטת גם על ידי תג מדיניות אבטחה ברמת העמודה שאוסר על
כל אחד לגשת אליה, וגם מושפעת ממדיניות גישה ברמת השורה, שמסננת חלק מהנתונים בשורות בעמודה color.
מדיניות הגישה השנייה ברמת השורה מציגה רק שורות עם הערך
greenבעמודהcolor.CREATE ROW ACCESS POLICY only_green ON my_dataset.my_table GRANT TO ('user:alice@example.com') FILTER USING (color="green");
השאילתה של אמיר
אם ירון, הקולגה של עינת, מנסה לשלוח שאילתה לנתונים מ-my_dataset.my_table, הוא לא רואה שורות כי הוא לא מופיע ברשימת מקבלי ההרשאות של אף מדיניות גישה ברמת השורה בטבלה.
| שאילתה | my_dataset.my_table
|
תגובות | ||
|---|---|---|---|---|
rank(חלק מהנתונים מושפע מהמדיניות בנושא גישה לשורות only_odd) |
fruit(כל הנתונים מאובטחים באמצעות תג מדיניות CLS) |
color(כל הנתונים מאובטחים באמצעות תג מדיניות של CLS, וחלק מהנתונים מושפע ממדיניות הגישה לשורות only_green) |
||
SELECT rank FROM my_dataset.my_table
|
(0) שורות הוחזרו. |
בוב לא מופיע ברשימת המענקים של מדיניות הגישה ברמת השורה, ולכן השאילתה הזו מצליחה, אבל לא מוחזרים נתונים של שורות. מוצגת לבוב הודעה שלפיה יכול להיות שהתוצאות שלו מסוננות על ידי מדיניות הגישה לשורות. |
||
השאילתות של אליס
כשעינת מריצה שאילתות כדי לגשת לנתונים מ-my_dataset.my_table, התוצאות שלה תלויות בשאילתה שהיא מריצה ובאבטחה, כמו שמוצג בטבלה הבאה.
| שאילתה | my_dataset.my_table
|
תגובות | ||
|---|---|---|---|---|
rank(חלק מהנתונים מושפע מהמדיניות בנושא גישה לשורות only_odd) |
fruit(כל הנתונים מאובטחים באמצעות תג מדיניות CLS) |
color(כל הנתונים מאובטחים באמצעות תג מדיניות של CLS, וחלק מהנתונים מושפע ממדיניות הגישה לשורות only_green) |
||
|
מוחזרת שורה אחת (1). |
אליס מופיעה ברשימת מקבלי ההרשאות של only_odd ושל כללי מדיניות הגישה ברמת השורה only_green. לכן, אליס רואה רק דרגות שהן מספרים אי-זוגיים וצבעים ירוקים. לכן, אליס רואה את השורה הבאה:
rank: 3, color: green.אליס לא רואה את העמודה 'פרי' כי היא מוגבלת על ידי מדיניות אבטחה ברמת העמודה. לאליס מוצגת הודעה שלפיה יכול להיות שהתוצאות שלה מסוננות לפי מדיניות הגישה לשורות. |
||
|
|
העמודה fruit צוינה בשם באופן מפורש בשאילתה. האבטחה ברמת העמודה חלה. הגישה נדחתה. |
||
|
מוחזרת שורה אחת (1). |
אליס מופיעה ברשימת מקבלי ההרשאות של only_odd ושל כללי מדיניות הגישה ברמת השורה only_green. לכן, אליס רואה רק דרגות שהן מספרים אי-זוגיים וצבעים ירוקים. לכן, אליס רואה את השורה הבאה:
rank: 3, color: green.אליס לא רואה את העמודה 'פרי' כי היא מוגבלת על ידי מדיניות אבטחה ברמת העמודה. לאליס מוצגת הודעה שלפיה יכול להיות שהתוצאות שלה מסוננות לפי מדיניות הגישה לשורות. |
||
|
|
העמודה fruit צוינה בשם באופן מפורש בשאילתה. האבטחה ברמת העמודה חלה לפני שמדיניות הגישה ברמת השורה מופעלת על הנתונים בעמודה rank.הגישה נדחתה. |
||
|
מוחזרת שורה אחת (1). |
אליס מופיעה ברשימת מקבלי ההרשאות של only_odd ושל כללי מדיניות הגישה ברמת השורה only_green. לכן, אליס רואה רק דרגות שהן מספרים אי-זוגיים וצבעים ירוקים. לכן, אליס רואה את השורה הבאה:
rank: 3, color: green.אליס לא רואה את העמודה 'פרי' כי היא מוגבלת על ידי מדיניות אבטחה ברמת העמודה. לאליס מוצגת הודעה שלפיה יכול להיות שהתוצאות שלה מסוננות לפי מדיניות הגישה לשורות. |
||
|
|
העמודה fruit צוינה במפורש בשאילתה. האבטחה ברמת העמודה בעמודה fruit חלה לפני שמדיניות הגישה ברמת השורה מופעלת על הנתונים בעמודה color.הגישה נדחתה. |
||
|
מוחזרת שורה אחת (1). |
אליס מופיעה ברשימת מקבלי ההרשאות של only_odd ושל כללי מדיניות הגישה ברמת השורה only_green. לכן, אליס רואה רק דרגות שהן מספרים אי-זוגיים וצבעים ירוקים. לכן, אליס רואה את השורה הבאה:
rank: 3, color: green.אליס לא רואה את העמודה 'פרי' כי היא מוגבלת על ידי מדיניות אבטחה ברמת העמודה. לאליס מוצגת הודעה שלפיה יכול להיות שהתוצאות שלה מסוננות לפי מדיניות הגישה לשורות. |
||
גישה למסנן TRUE
לבסוף, כמו שמוסבר בקטע על גישה למסנן TRUE, אם לאלי או לבוב יש גישה למסנן TRUE, הם יכולים לראות את כל השורות בטבלה ולהשתמש בה במשימות שאינן שאילתות. עם זאת, אם בטבלה מוגדרת אבטחה ברמת העמודה, היא עדיין חלה ויכולה להשפיע על התוצאות.
גרף הרצה
אי אפשר להשתמש בגרף של ביצוע שאילתות לעבודות עם מדיניות גישה ברמת השורה.
שליפת משרות
אם בטבלה מוגדרת מדיניות גישה ברמת השורה, רק הנתונים שאתם יכולים לראות מיוצאים ל-Cloud Storage כשמריצים משימת חילוץ.
SQL מדור קודם
מדיניות גישה ברמת השורה לא תואמת ל-SQL מדור קודם. שאילתות על טבלאות עם מדיניות גישה ברמת השורה חייבות להשתמש ב-GoogleSQL. שאילתות SQL מדור קודם נדחות.
טבלאות מחולקות למחיצות ומקובצות לאשכולות
אבטחה ברמת השורה לא משתתפת בגיזום של שאילתות, תכונה של טבלאות מחולקות.
אבטחה ברמת השורה תואמת לטבלאות עם חלוקה למחיצות ועם אשכולות, אבל מדיניות הגישה ברמת השורה שמסננת את נתוני השורה לא מוחלת במהלך הסרת מחיצות. עדיין אפשר להשתמש בגיזום מחיצות בטבלה שמוגדרת בה אבטחה ברמת השורה, על ידי ציון פסקה WHERE שפועלת בעמודת המחיצה. באופן דומה, מדיניות גישה ברמת השורה לא משפרת את הביצועים של שאילתות שמופעלות על טבלאות מקובצות, אבל היא גם לא מפריעה לסינון אחר שאתם מבצעים.
הגיזום של השאילתות מתבצע במהלך ההפעלה של מדיניות הגישה ברמת השורה, באמצעות המסננים עם כללי המדיניות.
שינוי שם של טבלה
לא צריך גישה לסינון TRUE כדי לשנות את השם של טבלה עם מדיניות אחת או יותר של גישה לשורות. אפשר לשנות את השם של טבלה באמצעות הצהרת DDL.
אפשרות נוספת היא להעתיק טבלה ולתת לטבלת היעד שם אחר. אם בטבלת המקור מוגדרת מדיניות גישה ברמת השורה, אפשר לקרוא מידע נוסף על העתקת טבלאות בדף הזה.
עדכונים בסטרימינג
כדי לבצע פעולות בטבלה זמנית UPDATE או DELETE באמצעות סימון נתונים שהשתנו (CDC), צריך להיות לכם מסנן גישה TRUE.
מסע בזמן
רק אדמין של טבלה יכול לגשת לנתונים היסטוריים של טבלה שיש לה מדיניות גישה ברמת השורה, או שהייתה לה מדיניות כזו בעבר. משתמשים אחרים מקבלים את השגיאה access
denied אם הם משתמשים ב-decorator של מסע בזמן בטבלה שהייתה לה גישה ברמת השורה. מידע נוסף זמין במאמר בנושא גישה ברמת השורה ושימוש בתכונה 'חזרה בזמן'.
תצוגות לוגיות, מהותיות ומורשות
בקטע הזה מתוארים סוגים שונים של תצוגות BigQuery והאינטראקציה שלהם עם אבטחה ברמת השורה.
תצוגות לוגיות או מהותיות
תצוגות לוגיות או מהותיות נוצרות משאילתות שמופעלות על טבלאות. תוצאות השאילתה הן בדרך כלל קבוצת משנה של נתוני הטבלה.
הנתונים שמוצגים בכל אחד מסוגי התצוגה מסוננים בהתאם למדיניות הגישה ברמת השורה של טבלת המקור הבסיסית. עם זאת, אי אפשר להפנות לתצוגות או לתצוגות חומריות במדיניות גישה ברמת השורה.
ביצועים של תצוגות מהותיות
בנוסף, כשתצוגה חומרית נגזרת מטבלה בסיסית שיש לה מדיניות גישה ברמת השורה, ביצועי השאילתה זהים לביצועים כשמבצעים שאילתה ישירות בטבלת המקור. במילים אחרות, אם בטבלת המקור יש אבטחה ברמת השורה, לא תראו את היתרונות הרגילים בביצועים של שאילתה על תצוגה חומרית לעומת שאילתה על טבלת המקור.
תצוגות מורשות
אפשר גם לתת הרשאה לתצוגה לוגית או לתצוגה חומרית, כלומר לשתף את התצוגה עם משתמשים או קבוצות ספציפיים (גורמים). לאחר מכן, חשבונות המשתמש יכולים לשלוח שאילתות לתצוגה, אבל אין להם גישה לטבלה הבסיסית. מידע נוסף זמין במאמר בנושא תצוגות מורשות.
שאילתות עם תו כללי לחיפוש
שאילתות עם תו כללי לחיפוש נגד טבלאות עם מדיניות גישה ברמת השורה נכשלות עם השגיאה INVALID_INPUT.
המאמרים הבאים
- מידע על שיטות מומלצות למדיניות גישה ברמת השורה זמין במאמר שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery.