为了帮助您为 AlloyDB for PostgreSQL 资源实现强大的安全状况,请遵循本页面中提供的最佳实践。
防止搜索路径劫持
为防止搜索路径劫持,请为高特权用户将 search_path 参数设置为 pg_catalog。此配置可保护搜索路径,以便绕过 public 等不可信架构。
如需为用户永久设置此参数,请运行以下命令:
ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;
如需仅为当前会话设置此参数,请运行以下命令:
SET search_path TO pg_catalog,pg_temp;
如需在连接到数据库时为所有用户设置此参数,请运行以下命令:
ALTER DATABASE DB_NAME SET search_path TO schema1, schema2, public;
如需详细了解如何保护 public 架构,请参阅有关安全架构用法的 PostgreSQL 文档和 CVE-2018-1058 指南。
使用外部数据封装容器保护 BigQuery 数据访问
使用 BigQuery 外部数据封装容器 (FDW) 时,从 AlloyDB 到 BigQuery 的所有查询都会使用 AlloyDB 集群的服务账号进行身份验证。由于此服务账号可能具有对多个敏感 BigQuery 数据集的访问权限,因此必须防止常规数据库用户映射未经授权的表。
如需强制执行最小权限访问,请限制外部服务器上的 USAGE 权限,以便非管理员用户无法运行 CREATE FOREIGN TABLE 语句:
限制外部服务器上的
USAGE:防止非管理员角色拥有USAGE权限,并在必要时撤消PUBLIC的USAGE权限。集中创建表:仅允许数据库管理员(例如具有
alloydbsuperuser角色的用户)创建外部表。授予选择性访问权限:使用
GRANT SELECT管理对特定外部表的读取权限。
示例:配置最小权限访问
以下工作流演示了管理员如何安全地向普通用户 (bob) 授予对特定 BigQuery 表的访问权限,而不允许他们映射任意数据集:
作为管理员,创建外部服务器并撤消
PUBLIC的USAGE权限,以防止未经授权创建表:CREATE EXTENSION IF NOT EXISTS bigquery_fdw; CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw; -- Explicitly revoke USAGE from all users to prevent unauthorized table creation REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC;作为管理员,为常规用户创建用户映射:
CREATE USER MAPPING FOR bob SERVER bq_server;以管理员身份创建外部表:
-- Because 'bob' does not have USAGE on bq_server, only the administrator can run this. CREATE FOREIGN TABLE example_table ( id INT, state VARCHAR ) SERVER bq_server OPTIONS ( project 'BIGQUERY_PROJECT_ID', dataset 'BIGQUERY_DATASET_NAME', table 'example_table' );作为管理员,向常规用户授予对特定外部表的选择性读取权限:
GRANT SELECT ON public.example_table TO bob;