התצוגה OBJECT_PRIVILEGES

התצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES מכילה מטא-נתונים לגבי קישורי בקרת גישה שהוגדרו באופן מפורש באובייקטים של BigQuery. התצוגה הזו לא מכילה מטא-נתונים לגבי ההרשאות לבקרת גישה שעברו בירושה.

ההרשאות הנדרשות

כדי לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES, צריך את ההרשאות הבאות בממשק לניהול זהויות והרשאות גישה (IAM):

  • bigquery.datasets.get למערכי נתונים.
  • bigquery.tables.getIamPolicy לטבלאות ולתצוגות.

מידע נוסף על הרשאות ב-BigQuery זמין במאמר בקרת גישה באמצעות IAM.

סכימה

כשמבצעים שאילתה בתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES, תוצאות השאילתה מכילות שורה אחת לכל קשירת בקרת גישה למשאב.

לתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES יש את הסכימה הבאה:

שם העמודה סוג נתונים ערך
object_catalog STRING מזהה הפרויקט שמכיל את המשאב.
object_schema STRING שם מערך הנתונים שמכיל את המשאב. ‫NULL אם המשאב עצמו הוא מערך נתונים.
object_name STRING השם של הטבלה, התצוגה או מערך הנתונים שהמדיניות חלה עליהם.
object_type STRING סוג המשאב, כמו SCHEMA (dataset),‏ TABLE,‏ VIEW ו-EXTERNAL.
privilege_type STRING מזהה התפקיד, למשל roles/bigquery.dataEditor.
grantee STRING סוג המשתמש והמשתמש שהתפקיד הוקצה לו.

כדי לשמור על יציבות, מומלץ לציין במפורש את העמודות בשאילתות של סכימת המידע, במקום להשתמש בתו כל כללי (SELECT *). ציון מפורש של העמודות מונע את השבירה של השאילתות אם הסכימה הבסיסית משתנה.

היקף ותחביר

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

שם התצוגה היקף המשאבים היקף האזור
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES ברמת הפרויקט REGION
מחליפים את מה שכתוב בשדות הבאים:
  • אופציונלי: PROJECT_ID: מזהה הפרויקט ב- Google Cloud . אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
  • REGION: כל שם של אזור במערך נתונים. לדוגמה, `region-us`.

דוגמה

-- Returns metadata for the access control bindings for mydataset.
SELECT * FROM myproject.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
WHERE object_name = "mydataset";

מגבלות

  • השאילתות של OBJECT_PRIVILEGES צריכות להכיל פסקה של WHERE שמגבילה את השאילתות לקבוצת נתונים, לטבלה או לתצוגה אחת.
  • בשביל לשלוח שאילתות לאחזור מטא-נתונים של בקרת גישה למערך נתונים, צריך לציין את object_name.
  • בשאילתות לאחזור מטא-נתונים של בקרת גישה לטבלה או לתצוגה, צריך לציין גם את object_name וגם את object_schema.

דוגמאות

בדוגמה הבאה מאחזרים את כל העמודות מהתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

כדי להריץ את השאילתה על פרויקט אחר ולא על הפרויקט שבו השאילתה מורצת, מוסיפים את מזהה הפרויקט לאזור בפורמט הבא: `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES.

בדוגמה הבאה מוצגים כל המטא-נתונים של בקרת הגישה של מערך הנתונים mydataset בפרויקט mycompany:

SELECT *
FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
WHERE object_name = "mydataset"

התוצאות צריכות להיראות כך:

  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | object_catalog | object_schema | object_name | object_type |  privilege_type           | grantee                           |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataEditor | projectEditor:mycompany           |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | projectOwner:mycompany            |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | user:cloudysanfrancisco@gmail.com |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataViwer  | projectViewer:mycompany           |
  +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
  

בדוגמה הבאה מוצג כל המידע על בקרת הגישה לטבלה testdata במערך הנתונים mydataset:

SELECT *
FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
WHERE object_schema = "mydataset" AND object_name = "testdata"

התוצאות צריכות להיראות כך:

  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  | object_catalog | object_schema |  object_name | object_type |  privilege_type      | grantee                            |
  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  | mycompany      | mydataset     | testdata     | TABLE       | roles/bigquery.admin | user:baklavainthebalkans@gmail.com |
  +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
  

בתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES מוצגים רק קישורי בקרת גישה שהוגדרו באופן מפורש. בדוגמה הראשונה אפשר לראות שלמשתמש cloudysanfrancisco@gmail.com יש את התפקיד bigquery.dataOwner במערך הנתונים mydataset. המשתמש cloudysanfrancisco@gmail.com מקבל בירושה הרשאות ליצור, לעדכן ולמחוק טבלאות ב-mydataset, כולל הטבלה testdata. עם זאת, מכיוון שההרשאות האלה לא ניתנו באופן מפורש בטבלה testdata, הן לא מופיעות בתוצאות של הדוגמה השנייה.