במדריך הזה מוסבר איך להשתמש בתצוגות עם פרמטרים ב-Spanner כדי להגביל את הגישה לנתונים על סמך פרמטרים שהאפליקציה מעבירה באופן מאובטח.
למידע נוסף על תצוגות עם פרמטרים, קראו את הסקירה הכללית על תצוגות עם פרמטרים.
מטרות
- יוצרים טבלה עם נתונים לדוגמה.
- יוצרים תצוגה עם פרמטרים שמסננת נתונים על סמך פרמטר הקשר מאובטח.
- יוצרים תפקיד במסד הנתונים לבקרת גישה מפורטת, שבו האפליקציה משתמשת כדי להתחבר למסד הנתונים ולגשת לתצוגה עם הפרמטרים.
- נותנים לתפקיד החדש הרשאות לשלוח שאילתות לתצוגה עם הפרמטרים, בלי לתת לו גישה למסד הנתונים הטבלאי.
- שולחים שאילתה לתצוגה שמכילה פרמטרים מאפליקציה, על ידי העברת פרמטר בהקשר המאובטח.
לפני שמתחילים
כדי להשלים את המדריך הזה, צריך מכונה ומסד נתונים של Spanner. אם אין לכם מסד נתונים, תוכלו לקרוא את המאמר יצירה של מסד נתונים ושליחת שאילתות אליו באמצעות מסוף Google Cloud כדי ליצור מכונה ומסד נתונים של Spanner.
הכנת נתונים לדוגמה
נכנסים לדף Spanner במסוף Google Cloud .
לוחצים על שם המכונה שבה רוצים להשתמש, ובוחרים את מסד הנתונים שבו רוצים להשתמש במדריך הזה.
בדף Database overview, לוחצים על Spanner Studio בתפריט הניווט.
מזינים את הצהרת ה-DDL הבאה כדי ליצור את הטבלה
checked_items:CREATE TABLE checked_items( bag_id INT64, item_timestamp TIMESTAMP, loc_code STRING(3), scan_type STRING(1), location STRING(MAX), customer_id INT64 ) PRIMARY KEY(bag_id);לוחצים על Run.
אחרי ש-Spanner יוצר את הטבלה, מזינים את ההצהרה הבאה כדי להוסיף נתונים לדוגמה לטבלה:
INSERT INTO checked_items (bag_id, item_timestamp, loc_code, scan_type, location, customer_id) VALUES (101, '2023-10-26 10:00:00', 'ABC', 'I', 'Warehouse A', 123), (102, '2023-10-26 10:15:30', 'DEF', 'O', 'Loading Dock B', 456), (103, '2023-10-26 10:30:45', 'GHI', 'I', 'Conveyor Belt 1', 789), (104, '2023-10-26 11:00:00', 'JKL', 'O', 'Shipping Area C', 101), (105, '2023-10-26 11:45:15', 'MNO', 'I', 'Sorting Station D', 202), (106, '2023-10-26 12:00:00', 'PQR', 'O', 'Truck Bay E', 303);לוחצים על Run.
יצירת תצוגה עם פרמטרים
יוצרים תצוגה עם SQL SECURITY DEFINER שמסננת שורות מ-checked_items על סמך הערך של app_end_userid שסופק על ידי SECURE_CONTEXT(). הפונקציה הזו מאחזרת ערכי פרמטרים שמועברים באופן מאובטח מהאפליקציה.
בעורך השאילתות, מזינים את ההצהרה הבאה כדי ליצור את התצוגה
secure_checked_items:CREATE VIEW secure_checked_items SQL SECURITY DEFINER AS (SELECT bag_id, item_timestamp, location FROM checked_items t WHERE customer_id = CAST(SECURE_CONTEXT('app_end_userid'), INT64));לוחצים על Run.
הגדרת הרשאות גישה
כדי לוודא שהמשתמשים יוכלו לגשת לנתונים רק דרך התצוגה עם הפרמטרים, יוצרים תפקיד של בקרת גישה מפורטת (FGAC) ומקצים לתפקיד הזה את ההרשאה SELECT בתצוגה. חשוב לוודא שלתפקיד ולתפקיד המערכת public אין הרשאות במסד הנתונים הטבלאי הבסיסי.
בעורך השאילתות, מזינים את ההצהרה הבאה כדי ליצור את התפקיד
pv_user:CREATE ROLE pv_user;נותנים גישה לתצוגה:
GRANT SELECT ON VIEW secure_checked_items TO ROLE pv_user;לוחצים על Run.
עם זאת, אם אתם צריכים לקרוא ישירות ל-SECURE_CONTEXT() כדי לנפות באגים בשאילתות, תנו לעצמכם את התפקיד spanner_secure_context_reader. אל תקצו את התפקיד הזה לסוכנים לא מהימנים.
שליחת שאילתה על נתונים באמצעות התצוגה שמכילה פרמטרים
האפליקציה שולחת שאילתה לתצוגה עם פרמטרים. קודם היא מגדירה פרמטרים בהקשר המאובטח של בקשת השאילתה, ואז מריצה שאילתת SELECT רגילה בתצוגה. התצוגה משתמשת בפונקציה SECURE_CONTEXT() כדי לסנן את התוצאות על סמך ערכי הפרמטרים.
בדוגמאות הקוד הבאות אפשר לראות איך מגדירים את הפרמטר המאובטח app_end_userid לערך 303 ושולחים שאילתה לתצוגה secure_checked_items:
C#
Go
Java
Python
השאילתה הזו מחזירה רק שורות מ-checked_items שבהן customer_id הוא 303:
+--------+---------------------------+-------------+
| bag_id | item_timestamp | location |
+--------+---------------------------+-------------+
| 106 | 2023-10-26 12:00:00+00:00 | Truck Bay E |
+--------+---------------------------+-------------+
1 row.
אם האפליקציה מתחברת ל-Spanner באמצעות חשבון משתמש שקיבל את התפקיד pv_user, כל ניסיון לשלוח שאילתה ישירות לטבלה checked_items יגרום לשגיאה של דחיית הרשאה.