MySQL
| PostgreSQL
| SQL Server
本教程介绍了如何在 Cloud SQL for PostgreSQL 中使用参数化安全视图,以使用 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的商品。
后续步骤
- 了解参数化安全视图概览。
- 了解如何使用参数化安全视图管理应用数据安全。