PostgreSQL的public模式属于默认模式,每个数据库都会自动创建这个模式。管理public模式的权限很关键,会影响到数据库的安全性和数据控制访问,华纳云总结了关于public权限管理的意义和注意事项分享给大家。
public属于PostgreSQL的默认模式,所有新创建的表、视图和其他对象,如果无指定模式名,都将防止在public模式下。默认情况下,所有用户都可访问public模式的对象,对于开发和测试环境都很方便,但是在生产环境中可能带来安全风险。
关于public的权限控制,可以通过管理public模式的权限,可以控制哪些用户在数据库中创建对象或访问现有对象。可以防止没有权限的用户对public模式的数据进行读写操作,保护了数据的安全。
使用public要注意一些原则如:
最小权限原则。遵循最小权限原则是确保只有必要用户具备创建/修改public模式中数据权限,如普通用户只有select权限,而没有INSERT、UPDATE 或 DELETE 权限。
修改默认权限原则。修改默认权限可以限制public模式的访问,默认情况下,public模式对所有用户开放,但是在生产环境中需要调整。
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT USAGE ON SCHEMA public TO specific_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO specific_user;
创建自定义模式。如果是需要更细致的权限控制也可以自定义模式,而不是把所有对象都放public模式下,自定义模式可灵活分配权限,控制哪些用户可访问哪些特定数据和功能。
CREATE SCHEMA custom_schema;
GRANT ALL ON SCHEMA custom_schema TO specific_user;
管理角色和组。使用角色和组可简化权限管理,创建不同角色把用户分配到这些角色中。给角色分配对应权限,而不是直接设置权限。
CREATE ROLE read_only_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user;
ALTER ROLE specific_user WITH IN ROLE read_only_user;
定期审计权限。定期检查和审计public模式及其他模式权限,确保符合预期的安全策略。可以移除不需要的权限,避免更多安全漏洞。
避免使用超级用户角色。尽量不用超级用户角色来进行日常操作,特别是在生产环境中。使用最小权限角色来操作,这样能很大程度降低因为权限多导致的风险。
应用和管理public模式的权限,实际应用示例:
-- 1. 撤销 public 模式的默认权限
REVOKE ALL ON SCHEMA public FROM PUBLIC;
-- 2. 授予特定用户使用 public 模式的权限
GRANT USAGE ON SCHEMA public TO specific_user;
-- 3. 授予特定用户对 public 模式中所有表的 SELECT 权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO specific_user;
-- 4. 创建自定义模式并授予特定用户权限
CREATE SCHEMA custom_schema;
GRANT ALL ON SCHEMA custom_schema TO specific_user;
-- 5. 创建角色并分配权限
CREATE ROLE read_only_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user;
-- 6. 将用户分配到角色中
ALTER ROLE specific_user WITH IN ROLE read_only_user;
管理PostgreSQL 中 public 模式的权限可以确保数据库的安全的关键步骤,通过遵循最小权限原则,修改默认权限,创建自定义模式,使用角色和组,定期审计权限和避免使用超级用户角色等,都可以有效的控制对数据库对象的访问。保护数据安全,增强整体系统的可靠性。