PostgreSQL/安全
外观
PostgreSQL 支持角色
[1]的概念来处理数据库中的安全问题。角色独立于操作系统用户帐户(除了在 pg_hba.conf 文件中定义的特殊情况对等身份验证)。
角色的概念包含了具有相同权限的单个用户和用户组的概念。角色可以被认为是单个数据库用户,也可以是数据库用户组,具体取决于角色的设置方式。因此,过时的 SQL 命令CREATE USER ...
只是CREATE ROLE ...
的别名。角色对数据库对象(如表或函数)具有某些权限,并且可以将这些权限分配给其他角色。角色在整个集群中是全局的,而不是针对单个数据库。
通常,具有相同权限的单个用户被分组到一个用户组中,并且权限被授予该组。
-- ROLE, in the sense of a group of individual users or other roles
CREATE ROLE group_1 ENCRYPTED PASSWORD 'xyz';
-- assign some rights to the role
GRANT SELECT ON table_1 TO group_1;
-- ROLE, in the sense of some individual users
CREATE ROLE adam LOGIN ENCRYPTED PASSWORD 'xyz'; -- Default is NOLOGIN
CREATE ROLE anne LOGIN ENCRYPTED PASSWORD 'xyz';
-- the link between user group and individual users
GRANT group_1 TO adam, anne;
使用CREATE ROLE
命令,您可以为该角色分配SUPERUSER、CREATEDB、CREATEROLE、REPLICATION和LOGIN权限。使用GRANT
命令,您可以将访问权限分配给数据库对象(如表)。GRANT
命令的第二个目的是定义组成员资格。
除了数据库管理员创建的角色之外,还始终存在一个特殊角色 PUBLIC,可以将其视为所有其他角色的成员。因此,分配给 PUBLIC 的权限会隐式地授予所有角色,即使这些角色是在稍后的阶段创建的。
可以使用以下命令列出角色。
使用 SQL,这将显示一组额外的 postgreSQL 默认角色,它们将常见的访问级别组合在一起
SELECT rolname FROM pg_roles;
或者 psql 命令
\du
select * from postgres.pg_catalog.pg_user