במסמך הזה מוסבר על תצוגות ב-Spanner.
סקירה כללית
תצוגה היא טבלה וירטואלית שמוגדרת על ידי שאילתת SQL. כשיוצרים תצוגה, מציינים את שאילתת ה-SQL שהיא מייצגת. אחרי שיוצרים תצוגה, אפשר להריץ שאילתות שמתייחסות לתצוגה כאילו היא טבלה.
כשמריצים שאילתה שמפנה לתצוגה, Spanner יוצר את הטבלה הווירטואלית על ידי הרצת השאילתה שמוגדרת בתצוגה, והתוכן של הטבלה הווירטואלית הזו משמש את השאילתה המפנה.
השאילתה שמגדירה תצוגה מופעלת בכל פעם שמופעלת שאילתה שמתייחסת לתצוגה, ולכן לפעמים קוראים לתצוגות 'תצוגות לוגיות' או 'תצוגות דינמיות' כדי להבדיל ביניהן לבין תצוגות חומריות של SQL, שבהן תוצאות השאילתה שמגדירה את התצוגה מאוחסנות כטבלה בפועל באחסון הנתונים.
ב-Spanner, אפשר ליצור תצוגה כתצוגה עם הרשאות של המפעיל או כתצוגה עם הרשאות של המגדיר. אלה שני סוגים של מודלים לאבטחה ששולטים בגישה של משתמשים לתצוגה.
| תצוגות של זכויות המשתמש שביצע את הפעולה | תצוגות של זכויות המגדיר | |
|---|---|---|
| תיאור | אם יוצרים תצוגה עם הרשאות של יוצר הפונקציה, צריך להקצות תפקיד במסד הנתונים עם הרשאות לתצוגה ולכל אובייקטי הסכימה שהתצוגה מפנה אליהם כדי לבצע שאילתה בתצוגה. מידע נוסף זמין במאמר בנושא תצוגות של הרשאות של משתמשים שמפעילים את הפונקציה. | אם יוצרים תצוגה עם הרשאות של מגדיר, תפקיד במסד הנתונים צריך הרשאות בתצוגה (ורק בתצוגה) כדי לבצע שאילתה בתצוגה. כדאי להשתמש בבקרת גישה ברמת פירוט גבוהה לצד תצוגת ההרשאות של היוצר, אחרת תצוגת ההרשאות של היוצר לא תוסיף בקרת גישה נוספת. מידע נוסף זמין במאמר תצוגות של הרשאות המוגדרות על ידי יוצר התצוגה. |
| ההרשאות שנדרשות ליצירת התצוגה | כדי ליצור גישה לסוגי התצוגה, להעניק אותה ולבטל אותה, צריך הרשאת spanner.database.updateDdl ברמת מסד הנתונים. |
|
| הרשאות שנדרשות לשאילתת התצוגה | כדי להריץ שאילתה על תצוגה, צריך להקצות להרשאה במסד הנתונים, וגם לכל אובייקטי הסכימה שמוגדרים מתחתיה. | תפקיד במסד נתונים צריך הרשאות לתצוגה (ורק לתצוגה) כדי לבצע שאילתה בתצוגה. |
היתרונות של צפיות
לתצוגות יש כמה יתרונות לעומת הכללת השאילתות שהן מגדירות בלוגיקה של האפליקציה.
תצוגות יכולות לספק מודלים לוגיים של נתונים לאפליקציות.
לפעמים הבחירות שמתאימות למודלים פיזיים של נתונים ב-Spanner לא מתאימות להפשטה של אפליקציות שקוראות את הנתונים האלה. תצוגה יכולה להציג סכימת טבלה חלופית שהיא הפשטה מתאימה יותר לאפליקציות.
התצוגות מרכזות את הגדרות השאילתות ומפשטות את התחזוקה.
אם תיצרו תצוגות לשאילתות מורכבות או לשאילתות שנמצאות בשימוש נרחב, תוכלו להוציא את טקסט השאילתה מהאפליקציות ולרכז אותו. כך קל יותר לעדכן את טקסט השאילתה באפליקציות שונות, ולשנות ולכוונן את השאילתות בלי לשנות את קוד האפליקציה.
תצוגות מספקות יציבות גם כשחלים שינויים בסכימה.
מכיוון שהשאילתה שמגדירה תצוגה מאוחסנת בסכימת מסד הנתונים ולא בלוגיקה של האפליקציה, Spanner יכולה לוודא ששינויים בסכימה של האובייקטים (טבלאות, עמודות וכו') שהשאילתה מפנה אליהם לא יבטלו את השאילתה.
תרחישים נפוצים לדוגמה
כדאי להשתמש בתצוגות כשמסד הנתונים של Spanner כולל נתונים עם הרשאות גבוהות שלא צריכים להיות חשופים לכל המשתמשים במסד הנתונים, או אם רוצים להצפין את הנתונים.
אם התצוגה לא צריכה פונקציונליות אבטחה נוספת ולכל מי שמפעיל את התצוגה יש גישה לכל אובייקטי הסכימה שהתצוגה מפנה אליהם, צריך ליצור תצוגה עם הרשאות של מי שמפעיל אותה.
אם רוצים ליצור תצוגה שבה לא לכל המשתמשים יש גישה לכל אובייקטי הסכימה שהתצוגה מפנה אליהם, צריך ליצור תצוגה עם הרשאות של מגדיר. התצוגות של הרשאות המגדיר מוגנות טוב יותר ויש להן יותר הגבלות, כי אדמין מסד הנתונים יכול להעניק הרשאות למספר קטן יותר של משתמשים בטבלאות ובעמודות שאליהן יש הפניה בתצוגה. תצוגות של הרשאות המגדיר שימושיות כשמשתמש צריך דרך מאובטחת לגשת לקבוצת משנה רלוונטית של מסד נתונים של Spanner. לדוגמה, יכול להיות שתרצו ליצור תצוגה עם הרשאות של יוצר עבור הנתונים הבאים:
- נתונים מחשבון לשימוש אישי (למשל, לקוח של אפליקציה).
- נתונים ספציפיים לתפקיד (למשל, אנשי משאבי אנוש, שותפי מכירות).
- נתונים ספציפיים למיקום.
תצוגות של זכויות המשתמש שביצע את הפעולה
אם לתצוגה יש הרשאות של מפעיל, המשמעות היא שכאשר משתמש, המפעיל, מריץ שאילתה על התצוגה, Spanner בודק את ההרשאות של המשתמש בתצוגה ובכל אובייקטי הסכימה שהתצוגה מפנה אליהם. למשתמש צריכות להיות הרשאות על כל אובייקטי הסכימה כדי להריץ שאילתה על התצוגה.
תצוגות של זכויות המגדיר
תצוגה של הרשאות של מגדיר מוסיפה לתצוגה פונקציונליות אבטחה נוספת. התפקיד הזה מספק הרשאות שונות לתצוגה ולאובייקטים של הסכימה הבסיסית. בדומה לתצוגות עם הרשאות של מי שהפעיל את הפונקציה, למשתמשים צריכות להיות הרשאות ברמת מסד הנתונים כדי ליצור תצוגות עם הרשאות של מי שהגדיר את הפונקציה. ההבדל העיקרי הוא שכאשר תפקיד במסד נתונים שולח שאילתה לתצוגה עם הרשאות של יוצר ההגדרה, Spanner מוודא שלתפקיד יש גישה לתצוגה עצמה (ורק לתצוגה). לכן, גם אם למשתמש ששולח שאילתה לתצוגה אין גישה לכל האובייקטים של הסכימה הבסיסית, הוא יכול לגשת לתצוגה ולראות את התוכן שלה. התצוגות של הרשאות המגדיר מאפשרות למשתמשים לגשת לנתונים עדכניים, והגישה מוגבלת לשורות שמוגדרות בתצוגה.
ההרשאות לניהול זהויות והרשאות גישה (IAM) ב-Spanner ניתנות ברמת מסד הנתונים. כדאי להשתמש בבקרת גישה פרטנית לצד תצוגת הזכויות של המגדיר, אחרת תצוגת הזכויות של המגדיר לא תוסיף בקרת גישה נוספת. הסיבה לכך היא שאם למשתמש יש הרשאות קריאה במסד הנתונים, יש לו הרשאות קריאה בכל אובייקטי הסכימה במסד הנתונים. אחרי שמגדירים בבסיס הנתונים בקרת גישה ברמת גרנולריות גבוהה, משתמשים עם הרשאה SELECT בתצוגה ומשתמשים עם הרשאות ברמת בסיס הנתונים יכולים לשלוח שאילתות לתצוגה. ההבדל הוא שהמשתמש עם בקרת גישה פרטנית לא צריך הרשאות לאובייקטים הבסיסיים.
מגבלות של תצוגות
לתצוגות יש מגבלות בהשוואה לטבלאות בפועל, ולכן הן לא מתאימות לתרחישי שימוש מסוימים.
התצוגות הן לקריאה בלבד. אי אפשר להשתמש בהם כדי להוסיף, לעדכן או למחוק נתונים.
אי אפשר להשתמש בתצוגות בפקודות DML (
INSERT, UPDATE, DELETE).בשאילתה שמגדירה תצוגה מפורטת אי אפשר להשתמש בפרמטרים של שאילתה.
אי אפשר להוסיף תצוגות לאינדקס.
בהפניות לתצוגות אי אפשר להשתמש ברמזים לטבלה.
עם זאת, השאילתה שמגדירה תצוגה יכולה לכלול רמזים לטבלה בטבלאות שהיא מתייחסת אליהן.
התצוגות לא נתמכות על ידי ה-API של Read.
אין תמיכה בתצוגות של הרשאות המגדיר ב-Spanner Data Boost.
הפעלת שאילתה שמכילה תצוגה של הרשאות מגדיר ב-Data Boost מובילה לשגיאה.
מצב השאילתה המומלץ לגישה לתצוגת הזכויות של המגדיר הוא מצב
NORMAL.משתמשים שאין להם גישה לאובייקטים של סכימה בסיסית בתצוגה של הרשאות המגדיר מקבלים שגיאה כשהם מבצעים שאילתה במצב שאילתה שאינו רגיל.
יכול להיות שמשתמש ייצור שאילתה מתוחכמת שתגרום ל-Spanner להקפיץ הודעת שגיאה שמראה או חושפת את קיומם של נתונים שלא זמינים בתצוגה של הרשאות ההגדרה.
לדוגמה, נניח שיש תצוגה בשם QualifiedStudentScores שמחזירה ציונים של תלמידים שעומדים בדרישות לקורס. הקריטריונים להסמכה מבוססים על הרמה ועל ציון הבחינה של התלמיד. אם הרמה של התלמיד היא שש או נמוכה יותר, הציון חשוב והתלמיד צריך לקבל לפחות 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 מפורטות המכסות והמגבלות שרלוונטיות לתצוגות מפורטות.
שימוש בתצוגה בשאילתה יכול להשפיע על התאימות של השאילתה למגבלות השאילתה, כי ההגדרה של התצוגה הופכת לחלק מהשאילתה.
השפעה על העלויות
לשימוש בתצוגות יש השפעה קטנה מאוד על העלות של מופע:
השימוש בתצוגות לא משפיע על הקיבולת הנדרשת לחישובים של מופע, בהשוואה להטמעה של טקסט השאילתה המוגדר בשאילתות שמפנות אליהן.
השימוש בתצוגות משפיע באופן מינורי על אחסון מסד הנתונים של מופע, כי הטבלה שנוצרת מהרצת הגדרת השאילתה של תצוגה לא נשמרת באחסון מסד הנתונים הקבוע.