跳转到内容

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、REPLICATIONLOGIN权限。使用GRANT命令,您可以将访问权限分配给数据库对象(如表)。GRANT命令的第二个目的是定义组成员资格。

除了数据库管理员创建的角色之外,还始终存在一个特殊角色 PUBLIC,可以将其视为所有其他角色的成员。因此,分配给 PUBLIC 的权限会隐式地授予所有角色,即使这些角色是在稍后的阶段创建的。

列出现有角色

[编辑 | 编辑源代码]

可以使用以下命令列出角色。

使用 SQL,这将显示一组额外的 postgreSQL 默认角色,它们将常见的访问级别组合在一起

SELECT rolname FROM pg_roles;

或者 psql 命令

\du
select * from postgres.pg_catalog.pg_user

参考文献

[编辑 | 编辑源代码]
  1. 角色的概念 [1]


华夏公益教科书