第 22 章 安全
目录
数据库安全在若干个层面上加以处理:
数据库文件保护。数据库中存储的所有文件都受到保护,除Postgres超级用户账户外,任何其他账户都不能读取。
默认情况下,从客户端到数据库服务器的连接只允许通过本地 Unix 套接字进行,而不允许通过 TCP/IP 套接字。后端必须以
-i选项启动才能允许非本地客户端连接。可以通过
pg_hba.conf文件(位于PG_DATA中)按 IP 地址和/或用户名限制客户端连接。客户端连接可以通过其他外部软件包进行认证。
Postgres中的每个用户都被分配一个用户名和(可选的)口令。默认情况下,用户对不是他们创建的数据库没有写权限。
用户可以被分配到组,表访问可以基于组权限加以限制。
22.1. 用户认证
认证是后端服务器和postmaster
确保请求访问数据的用户确实是其声称的那个人的过程。所有调用Postgres的用户都会对照
pg_user类的内容进行检查,以确保他们被授权这样做。不过,用户实际身份的验证可以通过多种方式进行:
- 从用户 shell
从用户 shell 启动的后端服务器会先记录用户的(有效)用户 id,然后执行
setuid切换到用户postgres的用户 id。有效用户 id 被用作访问控制检查的依据。不进行其他认证。- 从网络
如果Postgres系统构建为分布式,任何人都可以访问postmaster 进程的 Internet TCP 端口。DBA 配置 PGDATA 目录中的 pg_hba.conf 文件,根据发起连接的主机以及所连接的数据库来指定要使用的认证系统。可用认证系统的描述见pg_hba.conf(5)。当然,在 Unix 中基于主机的认证也不是万无一失的。意志坚定的入侵者也可能伪装来源主机。这些安全问题超出了Postgres的范围。