ההשפעה על פעולות כתיבה מבקרת גישה ברמת העמודה

בדף הזה מוסבר איך בקרת הגישה ברמת העמודה ב-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_id
credit_score
ssn

UPDATE

לדוגמה:

UPDATE customers SET credit_score = 0
  WHERE user_id LIKE 'alice%' AND credit_score < 30
עמודות מקור עדכון עמודות
האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? כן לא
עמודות שסומנו user_id
credit_score
credit_score

DELETE

לדוגמה:

DELETE customers WHERE credit_score = 0
עמודות מקור עדכון עמודות
האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? כן לא
עמודות שסומנו credit_score user_id
credit_score
ssn

טעינת דוגמאות

טעינה מקובץ מקומי או מ-Cloud Storage

לדוגמה:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
עמודות מקור עדכון עמודות
האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? לא רלוונטי לא
עמודות שסומנו לא רלוונטי user_id
credit_score
ssn

סטרימינג

לא מתבצעת בדיקה של תגי מדיניות כשמבצעים סטרימינג באמצעות Legacy Streaming API‏ insertAll או Storage Write API. בהטמעה של סימון נתונים שהשתנו (CDC) ב-BigQuery, תגי מדיניות נבדקים בעמודות של המפתח הראשי.

העתקת דוגמאות

הוספת נתונים לטבלה קיימת

לדוגמה:

cp -a samples.customers samples.customers_dest
עמודות מקור עדכון עמודות
האם תגי המדיניות נבדקים בגישה מפורטת לקריאה? כן לא
עמודות שסומנו customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_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_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn