מערכי נתונים מורשים

במאמר הזה נסביר איך להשתמש במערכי נתונים עם הרשאה ב-BigQuery. מערך נתונים עם הרשאה מאפשר לכם לתת הרשאה לכל התצוגות המפורטות במערך נתונים מסוים לגשת לנתונים במערך נתונים שני. אם יש לכם מערך נתונים מורשה, אתם לא צריכים להגדיר תצוגות מורשות בנפרד.

סקירה כללית

תצוגה ב-BigQuery היא טבלה וירטואלית שמוגדרת על ידי שאילתת SQL. לדוגמה, שאילתה של תצוגה עשויה להחזיר רק קבוצת משנה של העמודות בטבלה, לא כולל עמודות שמכילות פרטים אישיים מזהים (PII). כדי להריץ שאילתה על תצוגה מפורטת, למשתמש צריכה להיות גישה למשאבים שהשאילתה של התצוגה המפורטת ניגשת אליהם.

תצוגות מורשות

אם רוצים לאפשר למשתמשים לשאול שאילתות לגבי תצוגה, בלי לתת להם גישה ישירה למשאבים שהתצוגה מפנה אליהם, אפשר להשתמש בתצוגה מורשית. כשיוצרים תצוגה מורשית, אפשר לשתף תצוגה לוגית או תצוגה מהותית. כשמאשרים תצוגה מהותית, היא נקראת תצוגה מהותית מורשית.

לדוגמה, תצוגה עם הרשאת גישה מאפשרת לכם לשתף נתונים מוגבלים יותר בתצוגה עם קבוצות או משתמשים (גורמים) ספציפיים, בלי להעניק לגורמים האלה גישה לכל הנתונים הבסיסיים. החשבונות הראשיים יכולים לראות את הנתונים שאתם משתפים ולהריץ עליהם שאילתות, אבל הם לא יכולים לגשת ישירות למערך הנתונים המקורי. במקום זאת, לתצוגה המורשית יש גישה לנתוני המקור.

מערכי נתונים מורשים

אם רוצים לתת אוסף של תצוגות מפורטות גישה למערך נתונים, בלי לאשר גישה לכל תצוגה מפורטת בנפרד, אפשר לקבץ את התצוגות המפורטות למערך נתונים, ואז לתת למערך הנתונים שמכיל את התצוגות המפורטות גישה למערך הנתונים שמכיל את הנתונים. לאחר מכן תוכלו לתת לחשבונות משתמשים גישה למערך הנתונים עם קבוצת התצוגות, או לתצוגות בודדות במערך הנתונים, לפי הצורך.

מערך נתונים שיש לו גישה למערך נתונים אחר נקרא מערך נתונים עם הרשאה. מערך הנתונים שנותן הרשאה למערך נתונים אחר לגשת לנתונים שלו נקרא מערך נתונים משותף.

הרשאות ותפקידים נדרשים

כדי לתת הרשאה לערכת נתונים או לבטל הרשאה לערכת נתונים, דרושות לכם ההרשאות הבאות לניהול זהויות והרשאות גישה (IAM), שמאפשרות לכם לעדכן את רשימת בקרת הגישה של ערכת הנתונים שאתם משתפים.

הרשאה משאב
bigquery.datasets.get מערך הנתונים שאתם משתפים.
bigquery.datasets.update מערך הנתונים שאתם משתפים.

תפקידי ה-IAM המוגדרים מראש הבאים מספקים את ההרשאות הנדרשות.

תפקיד תיאור
bigquery.dataOwner בעלים של נתונים ב-BigQuery
bigquery.admin אדמין של BigQuery

אחרי שמקבלים הרשאה למערך נתונים, אפשר ליצור או לעדכן תצוגות מפורטות במערך הנתונים שאושר. מידע נוסף וההרשאות הנדרשות מופיעים במאמר בנושא יצירה או עדכון של תצוגה במערך נתונים מורשה.

מכסות ומגבלות

מערכי נתונים מורשים כפופים למגבלות על מערכי נתונים. מידע נוסף זמין במאמר בנושא מגבלות על מערכי נתונים.

ברשימת בקרת הגישה של מערך נתונים יכולים להיות עד 2,500 משאבים מורשים בסך הכול, כולל תצוגות מורשות, מערכי נתונים מורשים ופונקציות מורשות. אם חורגים מהמגבלה הזו בגלל מספר גדול של תצוגות מורשות, אפשר לקבץ את התצוגות במערכי נתונים מורשים. כשיטה מומלצת, כדאי לקבץ תצוגות שקשורות זו לזו במערכי נתונים מורשים כשמעצבים ארכיטקטורות חדשות של BigQuery, במיוחד ארכיטקטורות מרובות דיירים.

איך מאשרים מערך נתונים

כדי לתת גישה לתצוגות הנוכחיות והעתידיות של מערך נתונים למערך נתונים אחר, צריך להוסיף את מערך הנתונים שרוצים לתת לו הרשאה לרשימת הגישה של מערך הנתונים שרוצים לשתף, באופן הבא:

המסוף

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets (מערכי נתונים) ואז לוחצים על מערך נתונים.

  4. בחלונית הפרטים שמופיעה, לוחצים על שיתוף ובוחרים באפשרות הרשאת גישה למערכי נתונים.

    איך נותנים הרשאה למערך נתונים במסוף Google Cloud

  5. בחלונית Authorized dataset שמופיעה, מזינים את Dataset ID של מערך הנתונים שרוצים לאשר, בפורמט הבא:

    PROJECT.AUTHORIZED_DATASET

    לדוגמה:

    myProject.myDataset

  6. לוחצים על הוספת הרשאה ואז על סגירה.

BQ

  1. פותחים את Cloud Shell:

    כניסה ל-Cloud Shell

  2. ‫כותבים את המטא-נתונים הקיימים (כולל רשימת בקרת הגישה) של מערך הנתונים שרוצים לשתף בקובץ JSON באמצעות הפקודה bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. משתמשים בכלי לעריכת טקסט כדי להוסיף את מערך הנתונים שרוצים לתת לו הרשאה לקטע access הקיים בקובץ ה-JSON שנוצר במיקום FILE_PATH.

    לדוגמה:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]

  4. מעדכנים את מערך הנתונים המשותף באמצעות הפקודה bq update. לדוגמה:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. כדי לוודא שמערך הנתונים המורשה נוסף, מזינים שוב את הפקודה bq show. לדוגמה:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. כדי לקבל את המטא-נתונים הנוכחיים של מערך הנתונים שרוצים לשתף, קוראים לשיטה datasets.get, באופן הבא:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    גוף התגובה מחזיר משאב Dataset שמכיל מטא-נתונים בפורמט JSON של מערך הנתונים.

  2. מוסיפים את מערך הנתונים שרוצים לתת לו הרשאה לקטע access של מטא-נתוני ה-JSON שהוחזרו במשאב Dataset באופן הבא:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. משתמשים בשיטה datasets.update כדי לעדכן את מערך הנתונים עם ההרשאה שנוספה:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    בגוף הבקשה, כוללים את משאב Dataset המעודכן.

  4. כדי לוודא שמערך הנתונים המורשה נוסף, אפשר להפעיל שוב את השיטה datasets.get.

ביטול ההרשאה של מערך נתונים

כשמוחקים מערך נתונים שקיבל הרשאה לגשת למערך נתונים אחר, יכול להיות שיעברו עד 24 שעות עד שהשינוי ישתקף במלואו ברשימות בקרת הגישה (ACL) של מערך נתוני המקור. במהלך הזמן הזה:

  • לא תהיה לכם גישה לנתוני המקור דרך מערך הנתונים שנמחק.
  • יכול להיות שעדיין יופיעו נתונים ממערך הנתונים שנמחק ברשימת בקרת הגישה של מערך הנתונים המקורי, והם ייכללו במגבלות של מערך הנתונים המורשה. יכול להיות שלא תוכלו ליצור מערכי נתונים חדשים עם הרשאות גישה עד שתעדכנו את רשימת ה-ACL.

כדי לבטל את הגישה שהוענקה לתצוגות במערך נתונים מורשה, צריך להסיר את מערך הנתונים המורשה מרשימת הגישה של מערך הנתונים המשותף, באופן הבא:

המסוף

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets (מערכי נתונים) ואז לוחצים על מערך נתונים.

  4. בחלונית הפרטים שמופיעה, לוחצים על שיתוף ובוחרים באפשרות הרשאת גישה למערכי נתונים.

    איך נותנים הרשאה למערך נתונים במסוף Google Cloud

  5. בחלונית Authorized dataset שמופיעה, מאתרים את הרשומה של מערך הנתונים המורשה בקטע Currently authorized datasets.

  6. לוחצים על סמל המחיקה לצד מערך הנתונים המורשה שרוצים להסיר, ואז לוחצים על סגירה.

BQ

  1. פותחים את Cloud Shell:

    כניסה ל-Cloud Shell

  2. ‫כותבים את המטא-נתונים הקיימים (כולל רשימת בקרת הגישה) של מערך הנתונים המשותף לקובץ JSON באמצעות הפקודה bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. משתמשים בעורך טקסט כדי להסיר את מערך הנתונים המורשה מהקטע access של קובץ ה-JSON שנוצר ב-FILE_PATH, באופן הבא:

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  4. מעדכנים את מערך הנתונים המשותף באמצעות הפקודה bq update. לדוגמה:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. כדי לוודא שמערך הנתונים המורשה הוסר, מזינים שוב את הפקודה bq show. לדוגמה:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. כדי לקבל את המטא-נתונים הנוכחיים של מערך הנתונים המשותף, קוראים ל-method‏ datasets.get באופן הבא:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    גוף התגובה מחזיר משאב Dataset שמכיל מטא-נתונים בפורמט JSON של מערך הנתונים.

  2. מסירים את מערך הנתונים המורשה מהקטע access בקובץ ה-JSON שהוחזר במשאב Dataset. לדוגמה:

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. כדי לעדכן את מערך הנתונים בהרשאה שהוסרה, משתמשים בשיטה datasets.update:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    בגוף הבקשה, כוללים את משאב Dataset המעודכן.

  4. כדי לוודא שמערך הנתונים המורשה הוסר, אפשר לקרוא שוב לשיטה datasets.get.

יצירה או עדכון של תצוגה במערך נתונים מורשה

כדי ליצור או לעדכן תצוגה שנמצאת במערך נתונים מורשה, צריך את ההרשאות למערך הנתונים המשותף שמפורטות בקטע הרשאות ותפקידים נדרשים, בנוסף להרשאות שנדרשות כדי ליצור או לעדכן תצוגה במערך נתונים רגיל.

בטבלה הבאה מפורטות ההרשאות של ניהול הזהויות והרשאות הגישה (IAM) שדרושות כדי ליצור או לעדכן תצוגה שנמצאת במערך נתונים מורשה:

הרשאה משאב
bigquery.datasets.get מערך הנתונים שאתם משתפים.
bigquery.tables.getData כל הטבלאות או התצוגות מקבוצת הנתונים המשותפת שמפנים אליהן בתצוגה החדשה שאתם יוצרים או מעדכנים.
bigquery.tables.create קבוצת הנתונים המורשית שבה אתם יוצרים תצוגה.
bigquery.tables.update מערך הנתונים המורשה שבו אתם מעדכנים תצוגה.

כדי למחוק תצוגה מפורטת מקבוצת נתונים מורשית, לא צריך הרשאות נוספות.

הרצת שאילתה בתצוגה במערך נתונים מורשה

כדי להריץ שאילתה בתצוגה בנתוני מערך מורשה, המשתמש צריך לקבל גישה לתצוגה, אבל לא נדרשת גישה למערך הנתונים המשותף.

מידע נוסף זמין במאמר בנושא תצוגות מורשות.

דוגמה למערך נתונים עם הרשאה

בדוגמה הבאה מוסבר איך ליצור מערך נתונים עם הרשאה ואיך להשתמש בו.

נניח שיש לכם שני מערכי נתונים בשמות private_dataset ו-public_dataset. מערך הנתונים private_dataset מכיל טבלה בשם private_table. מערך הנתונים public_dataset מכיל תצוגה בשם private_table_filtered. התצוגה private_table_filtered מבוססת על שאילתה שמחזירה חלק מהשדות בטבלה private_table, אבל לא את כולם.

אתם יכולים להעניק למשתמש גישה לנתונים שמוחזרים מהתצוגה private_table_filtered, אבל לא לכל הנתונים בטבלה private_table, באופן הבא:

  1. מקצים למשתמש את התפקיד bigquery.dataViewer במערך הנתונים public_dataset. התפקיד הזה כולל את ההרשאה bigquery.tables.getData, שמאפשרת למשתמש להריץ שאילתות על התצוגות בערכת הנתונים public_dataset. במאמר שליטה בגישה למערכי נתונים מוסבר איך להעניק תפקיד למשתמש במערך נתונים.

    עכשיו למשתמש יש הרשאה להריץ שאילתות בתצוגות ב-public_dataset, אבל הוא עדיין לא יכול לגשת לטבלה private_table ב-private_dataset. אם המשתמש ינסה לשלוח שאילתה ישירות לטבלה private_table, או אם הוא ינסה לגשת לטבלה private_table באופן עקיף על ידי שליחת שאילתה לתצוגה private_table_filtered, תוצג לו הודעת שגיאה דומה להודעה הבאה:

    Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.

  2. בדף BigQuery במסוף Google Cloud , פותחים את מערך הנתונים private_dataset, לוחצים על שיתוף ובוחרים באפשרות הרשאת מערכי נתונים.

  3. בחלונית Authorized dataset שמופיעה, מזינים את הערך PROJECT.public_dataset בשדה Dataset ID ולוחצים על Add Authorization.

    מערך הנתונים public_dataset נוסף לרשימת בקרת הגישה של מערך הנתונים private_dataset, וכך התצוגות במערך הנתונים public_dataset מקבלות הרשאה לשלוח שאילתות לנתונים במערך הנתונים private_dataset.

    המשתמש יכול עכשיו לשאול שאילתות על התצוגה המפורטת private_table_filtered במערך הנתונים public_dataset, וכך לגשת באופן עקיף למערך הנתונים private_dataset, בלי שיש לו הרשאות לגשת ישירות לנתונים במערך הנתונים private_dataset.

מגבלות

  • אפשר ליצור מערכי נתונים עם הרשאה באזורים שונים, אבל BigQuery לא תומך בשאילתות חוצות אזורים. לכן, מומלץ ליצור מערכי נתונים באותו אזור.

המאמרים הבאים

  • מידע על הרשאת גישה לתצוגה ספציפית לנתונים במערך נתונים זמין במאמר תצוגות מורשות.

  • מידע על מתן הרשאה לפונקציית טבלה או לפונקציה בהגדרת המשתמש (UDF) לגשת לנתונים במערך נתונים זמין במאמר בנושא פונקציות מורשות.