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

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

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

מטרות

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

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

יכול להיות שמשתמשים חדשים ב- Google Cloud זכאים לתקופת ניסיון בחינם.

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

לפני שמתחילים

הפעלת החיוב וממשקי ה-API הנדרשים

  1. במסוף Google Cloud , בוחרים פרויקט.

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  3. מפעילים את Cloud APIs שנדרשים כדי ליצור מכונת AlloyDB ל-PostgreSQL ולהתחבר אליה.

    הפעלת ה-API

    1. בשלב אישור הפרויקט, לוחצים על הבא כדי לאשר את שם הפרויקט שרוצים לבצע בו שינויים.
    2. בשלב Enable APIs (הפעלת ממשקי API), לוחצים על Enable (הפעלה) כדי להפעיל את ממשקי ה-API הבאים:

      • AlloyDB API

יצירה של מסד נתונים וחיבור אליו

  1. יצירת אשכול והמופע הראשי שלו.
  2. מתחברים למופע ויוצרים מסד נתונים.

הכנת הסביבה

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

הפעלת התוסף הנדרש

מפעילים את דגל מסד הנתונים parameterized_views.enabled, שטוען את ספריות התוספים הנדרשות. מידע נוסף זמין במאמר בנושא הגדרת דגלים של מסד נתונים במופע.

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

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

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

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

    psql database -U postgres
    

    מידע נוסף זמין במאמר בנושא ניהול משתמשים במסד נתונים ב-AlloyDB.

  2. יוצרים את התוסף parameterized_views במסד הנתונים.

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

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

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

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

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

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

    CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
    

    מידע נוסף זמין במאמר 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. באמצעות AlloyDB Studio או psql, מתחברים למסד הנתונים בתור admin_user.

    psql database -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 שהאפליקציה משתמשת בו כדי להתחבר למסד הנתונים ולהיכנס אליו כדי להריץ שאילתות.

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

    psql database -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 AI בשפה טבעית.

הסרת המשאבים

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

  1. נכנסים לדף Clusters במסוף Google Cloud .

    כניסה לדף Clusters

  2. בעמודה שם המשאב, לוחצים על שם האשכול, my-cluster.

  3. לוחצים על מחיקת האשכול.

  4. בקטע Delete cluster my-cluster, מזינים my-cluster כדי לאשר את מחיקת האשכול.

  5. לוחצים על Delete.

  6. אם יצרתם חיבור פרטי כשיצרתם אשכול, עוברים אל Google Cloud מסוףהדף 'רשת' ולוחצים על מחיקת רשת VPC.

  7. באמצעות AlloyDB Studio או psql, מתחברים למסד הנתונים בתור postgres.

    psql database -U postgres
    
  8. משחררים את האובייקטים שיצרתם.

    DROP VIEW schema.secure_checked_items;
    DROP TABLE schema.checked_items;
    DROP SCHEMA schema;
    DROP ROLE psv_user;
    DROP ROLE admin_user;
    DROP EXTENSION parameterized_views;
    

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