סקירה כללית של הצפיות

במאמר הזה נציג ונתאר את התצוגות ב-Spanner.

סקירה כללית

תצוגה היא טבלה וירטואלית שמוגדרת על ידי שאילתת SQL. כשיוצרים תצוגה, מציינים את שאילתת ה-SQL שהיא מייצגת. אחרי שיוצרים תצוגה, אפשר להריץ שאילתות שמתייחסות לתצוגה כאילו היא טבלה.

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

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

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

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

תצוגות עם פרמטרים

תצוגה עם פרמטרים משפרת את התצוגות הרגילות ומציעה הגנה חזקה יותר על הנתונים, במיוחד באפליקציות שמשתמשות בסוכני AI או במודלים גדולים של שפה (LLM). המטרה העיקרית שלו היא להוסיף באופן מאובטח פרמטרים, כמו זהות המשתמש, ישירות להגדרה של התצוגה. סוג התצוגה הזה דורש את מודל האבטחה definer's rights view, שמאפשר ל-Spanner לאכוף באופן דינמי אבטחה ברמת השורה על סמך המשתמש שמבצע את השאילתה.

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

היתרונות של תצוגות

לתצוגות יש כמה יתרונות על פני הכללת השאילתות שהן מגדירות בלוגיקה של האפליקציה.

  • תצוגות יכולות לספק מודלים לוגיים של נתונים לאפליקציות.

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

  • תצוגות מרכזות את הגדרות השאילתות, וכך מפשטות את התחזוקה.

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

  • תצוגות מספקות יציבות בשינויים בסכימה.

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

תרחישים נפוצים לדוגמה

כדאי להשתמש בתצוגות כשמסד הנתונים ב-Spanner כולל נתונים עם הרשאות גבוהות שלא אמורים להיחשף לכל המשתמשים במסד הנתונים, או אם רוצים להכיל את הנתונים.

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

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

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

תצוגות של זכויות המפעיל

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

תצוגות של זכויות המגדיר

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

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

מגבלות של תצוגות מפורטות

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

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

    אי אפשר להשתמש בתצוגות בפקודות DML‏ (INSERT, UPDATE, DELETE).

  • השאילתה שמגדירה תצוגה לא יכולה להשתמש בפרמטרים של שאילתה.

  • אי אפשר להוסיף תצוגות לאינדקס.

  • בהפניות לתצוגות אי אפשר להשתמש ברמזים לטבלאות.

    עם זאת, השאילתה שמגדירה תצוגה יכולה לכלול רמזים לטבלאות שאליהן היא מתייחסת.

  • תצוגות לא נתמכות על ידי ה-API Read.

  • אי אפשר להשתמש בתצוגות עם זכויות של מגדיר ב-Spanner Data Boost.

    אם מריצים שאילתה שמכילה תצוגה של זכויות מגדיר ב-Data Boost, מתקבלת שגיאה.

  • מצב השאילתה המומלץ לגישה לתצוגה של זכויות המגדיר הוא מצב NORMAL.

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

  • משתמש יכול ליצור שאילתה מתוחכמת שתגרום ל-Spanner להציג שגיאה שחושפת את קיומם של נתונים שלא זמינים בתצוגה עם זכויות המגדיר.

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

      CREATE VIEW QualifiedStudentScores
      SQL SECURITY DEFINER AS
      SELECT
        s.Name,
        s.Level,
        sc.Score
      FROM Students AS s
      JOIN Scores AS sc ON sc.StudentId = s.StudentId
      WHERE
      (CASE
        WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50)
          THEN 'QUALIFIED';
        ELSE 'FAILED';
      END) = 'QUALIFIED';
    

    משתמש יכול להריץ שאילתה בפורמט SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;. השאילתה הזו עלולה להיכשל עם שגיאת חלוקה באפס אם יש תלמיד ברמה 7 שקיבל ציון של 20 נקודות, למרות שהתצוגה מגבילה את הנתונים ל-50 נקודות ומעלה לרמה הזו.

ביצועי השאילתה כשמשתמשים בתצוגות

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

מכסות ומגבלות שחלות על תצוגות

  • בדף Quotas & limits מפורטות המכסות והמגבלות שרלוונטיות ספציפית לתצוגות.

  • שימוש בתצוגה בשאילתה יכול להשפיע על התאימות של השאילתה למגבלות השאילתה, כי ההגדרה של התצוגה הופכת לחלק מהשאילתה.

ההשפעה על העלות

השימוש בתצוגות משפיע באופן מזערי על עלות המכונה:

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

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

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