PostgreSQL 通过 roles(既充当用户又充当组)和 privileges(在对象上授予的权限)来管理访问控制。该系统控制谁可以连接以及他们可以做什么——这是数据库安全的基础。
Roles — 统一的用户和组
ROLE app_user LOGIN PASSWORD ;
ROLE readonly;
readonly app_user;
PostgreSQL 通过 roles(既充当用户又充当组)和 privileges(在对象上授予的权限)来管理访问控制。该系统控制谁可以连接以及他们可以做什么——这是数据库安全的基础。
ROLE app_user LOGIN PASSWORD ;
ROLE readonly;
readonly app_user;
在 Postgres 中,role 是一个统一的概念——它可以登录(充当用户)和/或包含其他角色(充当组)。这个灵活的模型既处理用户又处理权限组。
-- grant specific privileges on objects
GRANT SELECT ON users TO readonly; -- read-only on a table
GRANT SELECT, INSERT, UPDATE, DELETE ON orders TO app_user; -- full data access
GRANT USAGE ON SCHEMA sales TO app_user; -- access a schema
GRANT ALL PRIVILEGES ON DATABASE mydb TO admin;
REVOKE INSERT ON orders FROM app_user; -- take away a privilege
权限(SELECT、INSERT、UPDATE、DELETE、USAGE 等)在对象(表、模式、数据库)上授予给角色——精确控制每个角色可以做什么。
-- ✅ grant only the permissions each role actually needs
GRANT SELECT ON reports TO analyst; -- analyst can only READ reports
-- ❌ don't grant ALL PRIVILEGES or superuser broadly — minimize the blast radius
最小权限——仅授予每个角色其需要的权限——是一项核心安全实践,可限制来自被破坏凭证或错误的损害。
-- the object's OWNER has full control; new objects need explicit grants
ALTER DEFAULT PRIVILEGES IN SCHEMA sales
GRANT SELECT ON TABLES TO readonly; -- auto-grant on FUTURE tables
理解 PostgreSQL 的角色和权限对于 数据库安全 很重要——控制谁可以访问数据库以及他们可以做什么是保护数据的基础,因此这些知识对任何生产数据库都很有价值。
理解 role 概念(Postgres 的统一模型,其中角色既充当用户——可以登录——又充当组——其他角色继承的权限集合)对于管理访问是必要的,因为这是您创建数据库用户和组织权限的方式。
了解如何在对象(表、模式、数据库)上向角色授予和撤销 privileges(SELECT、INSERT 等)对于精确控制每个用户或应用程序可以做什么至关重要。
极其重要的是 最小权限原则——仅授予每个角色其真正需要的权限(例如只读分析师角色、仅具有其需要的访问权限的应用程序角色),而不是广泛或超级用户权限——这是一项核心安全实践,可限制来自被破坏凭证、错误或疏漏的损害(一种真实的、重要的防御)。
理解默认权限和所有权(对象所有者拥有完全控制;将来的对象可能需要显式授予)完善了实际的访问管理。
由于数据库安全至关重要(数据库存储敏感、有价值的数据),并且由于通过角色和最小权限授予进行适当的访问控制是您如何保护该数据和限制风险的方式,理解 PostgreSQL 的角色和权限——统一的角色模型、授予/撤销权限,尤其是最小权限原则——是用于管理和保护生产数据库安全的重要安全相关知识,这是一项经常相关的责任,也是任何管理数据库访问的人的常见话题。