MySQL
| PostgreSQL
| SQL Server
本教學課程說明如何在 PostgreSQL 適用的 Cloud SQL 中使用參數化安全檢視區塊,透過 Cloud SQL Studio 或 psql 限制使用者對參數化檢視區塊的存取權。
目標
- 使用具名檢視區塊參數建立參數化安全檢視區塊。
- 建立應用程式用來連線至資料庫,以及存取參數化安全檢視區塊的資料庫角色。
- 授予新角色安全檢視區塊的權限,並撤銷對基礎資料表的存取權。
- 使用新角色連線,並確認無法存取受限資料表。
- 使用
execute_parameterized_query函式,對參數化安全檢視區塊執行查詢。
準備環境
為 Cloud SQL 執行個體啟用
cloudsql.enable_parameterized_views資料庫旗標。這項旗標變更需要重新啟動資料庫。以
postgres使用者身分連線至資料庫。psql -U postgres在資料庫中建立
parameterized_views擴充功能。CREATE EXTENSION parameterized_views;建立新的資料庫角色來執行查詢。
CREATE ROLE psv_user WITH LOGIN PASSWORD 'PASSWORD';為應用程式資料建立結構定義和資料表。
CREATE SCHEMA app_schema; CREATE TABLE app_schema.items(item_id INT, item_name TEXT, description TEXT, owner_id INT); INSERT INTO app_schema.items (item_id, item_name, description, owner_id) VALUES (1, 'Book', 'A great read', 123), (2, 'Laptop', 'Work machine', 456), (3, 'Pencil', 'For writing', 123);
建立安全參數化檢視區塊,並設定存取權
建立參數化安全檢視區塊:
CREATE VIEW app_schema.user_items_view WITH (security_barrier) AS SELECT item_id, item_name, description FROM app_schema.items WHERE owner_id = $@current_user_id;將檢視畫面和結構定義的存取權授予應用程式角色。
GRANT USAGE ON SCHEMA app_schema TO psv_user; GRANT SELECT ON app_schema.user_items_view TO psv_user;撤銷對基礎資料表的直接存取權。
REVOKE ALL PRIVILEGES ON app_schema.items FROM psv_user;
驗證資料安全性
以
psv_user身分連結。psql -U psv_user -d postgres確認無法存取基礎資料表。
SELECT * FROM app_schema.items; -- ERROR: permission denied for table items使用
execute_parameterized_query函式存取參數化安全檢視區塊:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from app_schema.user_items_view', param_names => ARRAY ['current_user_id'], param_values => ARRAY ['123'] );結果應只包含
owner_id為123的項目。
後續步驟
- 瞭解參數化安全檢視區塊總覽。
- 瞭解如何使用參數化安全檢視區塊管理應用程式資料安全性。