Cloud SQL for MySQL 中的参数化安全视图可在支持 SQL 的同时为应用提供数据安全和行级访问权限控制。这些视图支持数据值提取(从列中检索特定数据的过程),且有助于防范提示注入攻击。参数化安全视图有助于确保最终用户只能查看他们应该访问的数据。
参数化安全视图是 MySQL 视图的扩展,可让您在视图定义中使用应用特定的已命名视图参数。此功能提供了一个接口,可以接受查询和已命名参数的值。视图会使用这些值执行查询,整个查询执行过程都会使用这些值。参数化安全视图示例
以下示例展示了如何通过向WHERE 子句添加会话变量,在表上创建参数化安全视图。
-- Create a view with a parameter
CREATE VIEW v_orders AS
SELECT * FROM orders
WHERE customer_id = @local_customer_id AND year >= @earliest_year;
然后,您可以为视图设置参数并运行查询。
-- Set the parameter and query
SELECT /*+ SET_VIEW_VARS(local_customer_id=5, earliest_year=2021) */ * FROM v_orders;
-- Or query through a stored procedure
CALL mysql.execute_parameterized_query(
'SELECT * FROM db.v_orders',
'local_customer_id = 5, earliest_year = 2021');
使用场景
大语言模型 (LLM) 可能会生成泄露敏感数据的 SQL 查询。
参数化安全视图可在数据库级别管理数据安全,尤其是在处理来自不可信来源的临时查询(例如从自然语言转换而来的查询)时。例如,您可以使用参数化安全视图为用户可以使用自然语言(例如“显示我的订单”)发出查询的应用提供数据安全保障。
您可以使用参数化安全视图,对 Cloud SQL for MySQL 执行此查询的方式应用以下要求:
- 查询只能读取您在数据库参数化安全视图中列出的数据库对象和列。
- 查询只能读取与提交查询的用户相关联的数据库行。返回的行与用户表行具有数据关系。
如需详细了解如何配置安全性和访问权限控制,请参阅使用参数化安全视图。
参数化安全视图有助于缓解当允许最终用户在数据库表上运行不可信查询(例如自然语言查询)时可能会出现的安全风险。安全风险包括以下方面:
- 用户可以提交提示注入攻击,并尝试操纵底层模型来显示应用有权访问的所有数据。
- 自然语言到 SQL (NL2SQL) 模型可能会生成范围过于宽泛的 SQL 查询,出于数据安全考虑,这是不合适的。这种安全风险可能会导致在响应用户查询(即使是出于好意的查询)时泄露敏感数据。
借助参数化安全视图,您可以定义不可信查询可以从中提取数据的表和列。借助这些视图,您可以限制特定应用用户可访问的行范围。通过这些限制,您可以严格控制应用用户可以通过自然语言查询查看的数据,无论用户如何措辞。
例如,您可能有一个用于跟踪客户订单的应用。支持代理在应用中询问:“客户 12345 的订单状态是什么?” 在此场景中,应用可以使用基于客户 ID 的会话变量来使用参数化安全视图。参数化安全视图使用一个查询,该查询仅返回与客户 ID 12345 关联且可供客户 ID 12345 访问的行。
通过使用参数化安全视图,您可以限制特定应用用户可访问的行范围。无论用户如何措辞,此控制措施都能确保数据安全。
数据安全
参数化安全视图可让应用开发者通过以下方法实现数据安全和行级访问权限控制:
- MySQL 参数化安全视图可防止恶意选择的函数和运算符在视图完成其工作之前从行中传递值,从而提供行级安全性。
使用已命名视图参数可实现数据库的受限视图,该视图由值进行参数化。这些值由应用根据应用级安全性(例如最终用户身份验证)提供。
对访问参数化视图的查询强制执行额外限制,以防止基于给定参数值对视图中的检查进行逃逸攻击。如需了解详情,请参阅查询限制。
简化用户管理
借助参数化安全视图,您可以使用单个数据库角色为所有最终用户提供服务,而无需使用可能需要您为每个最终用户创建单独的数据库用户或角色的方法。对于每个最终用户只需要访问其自身数据的应用,这有助于简化用户和连接管理。
例如,在某个应用中,用户应只能查看特定客户的订单,您可以定义一个由最终用户标识符进行参数化的参数化安全视图。此视图允许单个数据库角色(具有对视图的访问权限,但没有对基础表的访问权限)为所有用户提供服务,从而简化用户管理和数据库连接。
限制
只有 Cloud SQL for MySQL 8.0.43 及更高版本支持参数化安全视图。如果您尝试在较低版本的 MySQL 中创建参数化安全视图,则 Cloud SQL 会返回错误。
您无法在
WHERE、HAVING或ON子句之外指定变量。您无法对参数化安全视图使用
EXPLAIN。
- 查询参数化安全视图时存在一些限制。如需了解详情,请参阅查询限制。