ההשפעה על פעולות כתיבה מבקרת גישה ברמת העמודה
בדף הזה מוסבר איך בקרת הגישה ברמת העמודה ב-BigQuery משפיעה על פעולות כתיבה, כשמשתמשים בה כדי להגביל את הגישה לנתונים ברמת העמודה. מידע כללי על בקרת גישה ברמת העמודה זמין במאמר מבוא לבקרת גישה ברמת העמודה ב-BigQuery.
כדי להשתמש בבקרת גישה ברמת העמודה, למשתמש צריכה להיות הרשאת קריאה לעמודות שמוגנות על ידי תגי מדיניות. חלק מפעולות הכתיבה צריכות לקרוא נתוני עמודות לפני שהן כותבות בעמודה. בפעולות האלה, מערכת BigQuery בודקת את הרשאת הקריאה של המשתמש כדי לוודא שיש לו גישה לעמודה. לדוגמה, אם משתמש מעדכן נתונים שכוללים כתיבה לעמודה מוגנת, למשתמש צריכה להיות הרשאת קריאה לעמודה המוגנת. אם המשתמש מוסיף שורת נתונים חדשה שכוללת כתיבה בעמודה מוגנת, הוא לא צריך הרשאת קריאה לעמודה המוגנת. אבל המשתמש שכותב שורה כזו לא יוכל לקרוא את הנתונים שנכתבו זה עתה, אלא אם יש לו הרשאת קריאה לעמודות המוגנות.
בקטעים הבאים מפורטים סוגים שונים של פעולות כתיבה. בדוגמאות שבנושא הזה נעשה שימוש בטבלאות customers עם הסכימה הבאה:
| שם השדה | סוג | מצב | תג מדיניות |
|---|---|---|---|
user_id |
מחרוזת | חובה | policy-tag-1 |
credit_score |
מספר שלם | יכול להיות ריק | policy-tag-2 |
ssn |
מחרוזת | יכול להיות ריק | policy-tag-3 |
שימוש בשפת טיפול בנתונים (DML) ב-BigQuery
הוספת נתונים
במקרה של הצהרת INSERT, BigQuery לא בודק את ההרשאה 'קריאה מדויקת' בתגי המדיניות בעמודות שנסרקו או בעמודות שעודכנו. הסיבה לכך היא שINSERT לא דורש קריאה של נתוני העמודה. אבל גם אם תצליחו להוסיף ערכים לעמודות שאין לכם הרשאת קריאה לגביהן, אחרי ההוספה הערכים יהיו מוגנים כמו שצריך.
מחיקה, עדכון ומיזוג של נתונים
בשביל משפטי DELETE, UPDATE ו-MERGE, מערכת BigQuery בודקת אם יש הרשאת קריאה עם גרנולריות גבוהה בעמודות שנסרקו. העמודות לא נסרקות על ידי ההצהרות האלה, אלא אם כוללים סעיף WHERE, או סעיף אחר או שאילתת משנה שדורשים מהשאילתה לקרוא נתונים.
טעינת נתונים
כשמעלים נתונים (לדוגמה, מ-Cloud Storage או מקבצים מקומיים) לטבלה, מערכת BigQuery לא בודקת את הרשאת הקריאה המפורטת בעמודות של טבלת היעד. הסיבה לכך היא שאין צורך לקרוא תוכן מטבלת היעד כדי לטעון נתונים.
סטרימינג ל-BigQuery דומה לסטרימינג ל-LOAD ול-INSERT.
ב-BigQuery אפשר להזרים נתונים לעמודה בטבלת יעד, גם אם אין לכם הרשאת קריאה עם גרנולריות גבוהה.
העתקת נתונים
בפעולת העתקה, מערכת BigQuery בודקת אם למשתמש יש הרשאת קריאה עם גרנולריות גבוהה בטבלת המקור. BigQuery לא בודק אם למשתמש יש הרשאת קריאה מפורטת לעמודות בטבלת היעד. בדומה ל-LOAD, ל-INSERT ולסטרימינג, אחרי שההעתקה מסתיימת, לא תוכלו לקרוא את הנתונים שנכתבו זה עתה, אלא אם יש לכם הרשאת קריאה מדויקת לעמודות של טבלת היעד.
דוגמאות ל-DML
INSERT
לדוגמה:
INSERT INTO customers VALUES('alice', 85, '123-456-7890');
| עמודות מקור | עדכון עמודות | |
|---|---|---|
| האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? | לא רלוונטי | לא |
| עמודות שסומנו | לא רלוונטי | user_idcredit_scoressn |
UPDATE
לדוגמה:
UPDATE customers SET credit_score = 0
WHERE user_id LIKE 'alice%' AND credit_score < 30
| עמודות מקור | עדכון עמודות | |
|---|---|---|
| האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? | כן | לא |
| עמודות שסומנו | user_idcredit_score |
credit_score |
DELETE
לדוגמה:
DELETE customers WHERE credit_score = 0
| עמודות מקור | עדכון עמודות | |
|---|---|---|
| האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? | כן | לא |
| עמודות שסומנו | credit_score |
user_idcredit_scoressn |
טעינת דוגמאות
טעינה מקובץ מקומי או מ-Cloud Storage
לדוגמה:
load --source_format=CSV samples.customers \
./customers_data.csv \
./customers_schema.json
| עמודות מקור | עדכון עמודות | |
|---|---|---|
| האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? | לא רלוונטי | לא |
| עמודות שסומנו | לא רלוונטי | user_idcredit_scoressn |
סטרימינג
לא מתבצעת בדיקה של תגי מדיניות כשמבצעים סטרימינג באמצעות Legacy Streaming API insertAll או Storage Write API. בהטמעה של סימון נתונים שהשתנו (CDC) ב-BigQuery, תגי מדיניות נבדקים בעמודות של המפתח הראשי.
העתקת דוגמאות
הוספת נתונים לטבלה קיימת
לדוגמה:
cp -a samples.customers samples.customers_dest
| עמודות מקור | עדכון עמודות | |
|---|---|---|
| האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? | כן | לא |
| עמודות שסומנו | customers.user_idcustomers.credit_scorecustomers.ssn |
customers_dest.user_idcustomers_dest.credit_scorecustomers_dest.ssn |
שמירת תוצאות של שאילתה בטבלת יעד
לדוגמה:
query --use_legacy_sql=false \
--max_rows=0 \
--destination_table samples.customers_dest \
--append_table "SELECT * FROM samples.customers LIMIT 10;"
| עמודות מקור | עדכון עמודות | |
|---|---|---|
| האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? | כן | לא |
| עמודות שסומנו | customers.user_idcustomers.credit_scorecustomers.ssn |
customers_dest.user_idcustomers_dest.credit_scorecustomers_dest.ssn |