גישה מאובטחת לנתוני אפליקציות ושליטה בהם באמצעות תצוגות מאובטחות עם פרמטרים

בחירת גרסת התיעוד:

במדריך הזה מוסבר איך להשתמש בתצוגות מאובטחות עם פרמטרים ב-AlloyDB Omni כדי להגביל את גישת המשתמשים לתצוגות עם פרמטרים באמצעות AlloyDB Omni Studio או psql.

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

מטרות

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

התקנה וחיבור למסד נתונים

  1. איך מתקינים את AlloyDB Omni באמצעות RPM.

הכנת הסביבה

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

לפני שמשתמשים בתצוגות מאובטחות עם פרמטרים, צריך לבצע את הפעולות הבאות פעם אחת בסביבת Linux. אפשר להחיל כל הגדרה באמצעות ALTER SYSTEM או לערוך ישירות את postgresql.conf.:

  1. מוסיפים את parameterized_views אל shared_preload_libraries.
  2. מגדירים את parameterized_views.enabled=on כדי להפעיל את התכונה.
  3. מפעילים מחדש את postgres כדי שהשינויים ייכנסו לתוקף.

הגדרת מסד הנתונים

  • יוצרים מסד נתונים בשם database לנתוני האפליקציה ולתצוגות עם פרמטרים.

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

  1. באמצעות psql, מתחברים למסד הנתונים כמשתמש postgres או כמשתמש עם הרשאות סופר-אדמין ב-AlloyDB Omni.

    /usr/lib/postgresql/18/bin/psql -h localhost -U postgres
    
  2. יוצרים את התוסף parameterized_views במסד הנתונים.

    -- Requires parameterized_views.enabled set to true
    CREATE EXTENSION parameterized_views;
    

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

  3. יוצרים את תפקיד האדמין ב-AlloyDB Omni, שהוא הבעלים של מסד הנתונים ומנהל אותו.

    CREATE ROLE admin_user WITH LOGIN PASSWORD '...';
    GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;
    

    מידע נוסף זמין במאמר CREATE USER.

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

    מידע נוסף זמין במאמר CREATE USER.

  5. מתחברים בתור משתמש עם הרשאות אדמין.

    SET role TO admin_user;
    
  6. יוצרים את הסכימה שמכילה את הטבלאות.

    CREATE SCHEMA schema;
    
  7. יוצרים את הטבלאות ומזינים נתונים.

    CREATE TABLE schema.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT);
    
    INSERT INTO schema.checked_items (bag_id, 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);
    

יצירת תצוגות מאובטחות עם פרמטרים והגדרת הרשאות גישה

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

  1. באמצעות psql, מתחברים למסד הנתונים כ-admin_user.

    /usr/lib/postgresql/18/bin/psql -h localhost -U admin_user
    
  2. כדי לספק גישה מוגבלת לתצוגה, יוצרים תצוגה מאובטחת עם פרמטרים.

    CREATE VIEW schema.secure_checked_items WITH (security_barrier) AS
    SELECT bag_id, timestamp, location
    FROM schema.checked_items t
    WHERE customer_id = $@app_end_userid;
    
  3. נותנים גישה לתצוגה.

    GRANT SELECT ON schema.secure_checked_items TO psv_user;
    
  4. כדי לגשת לתצוגה, צריך לתת גישה לסכימה.

    GRANT USAGE ON SCHEMA schema TO psv_user;
    
  5. ביטול גישה ישירה לטבלת הבסיס.

    REVOKE ALL PRIVILEGES ON schema.checked_items FROM psv_user;
    

אימות אבטחת מידע

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

  1. התחברות כמשתמש בתצוגות מאובטחות עם פרמטרים.

    /usr/lib/postgresql/18/bin/psql -h localhost -U psv_user
    

  2. מוודאים שאי אפשר לגשת לטבלת הבסיס.

    SELECT * FROM schema.checked_items;
    ERROR:  permission denied for table checked_items
    
  3. אפשר לגשת לתצוגה מאובטחת עם פרמטרים באמצעות הפונקציה execute_parameterized_query.

    SELECT * FROM parameterized_views.execute_parameterized_query(
      query => 'SELECT * from schema.secure_checked_items',
      param_names => ARRAY ['app_end_userid'],
      param_values => ARRAY ['303']
    );
    
  4. כדי לשפר את האבטחה של שאילתות שנוצרות בשפה טבעית, אפשר לשלב תצוגות מאובטחות עם פרמטרים באמצעות שפה טבעית.

הסרת המשאבים

כדי לנקות, אפשר להסיר את ההתקנה של מופע AlloyDB Omni או להשאיר את המופע ולמחוק את האובייקטים הבודדים.

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