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

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

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

מטרות

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

עלויות

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

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

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

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

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

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

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

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

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

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

    הפעלת ה-API

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

      • AlloyDB API

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

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

הכנת הסביבה

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

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

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

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

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

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

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

    psql database -U postgres

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

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

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

    כשיוצרים את התוסף, המערכת יוצרת גם סכימה בשם parameterized_views, כדי שממשקי ה-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 '...';
    

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

    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. כדי להתחבר למסד הנתונים בתור postgres, משתמשים ב-AlloyDB Studio או ב-psql:

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

    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;
    

כדי למחוק את כל אשכול AlloyDB ורשת ה-VPC:

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

    כניסה לדף Clusters

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

  3. לוחצים על Delete cluster.

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

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

  6. אם יצרתם חיבור פרטי כשיצרתם אשכול, נכנסים לדף Networking במסוף Google Cloud ולוחצים על Delete VPC network.

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