第 4 章 数据库用户和权限
每个数据库集簇都包含一组数据库用户。这些用户与运行服务器的操作系统所管理的用户是相互独立的。用户拥有数据库对象(例如表),并且可以把这些对象上的权限赋予其他用户,以控制谁能访问哪些对象。
本章描述如何创建和管理用户,并介绍权限系统。关于各种类型的数据库对象和权限影响的更多信息,请见 PostgreSQL 用户指南。
4.1. 数据库用户 #
数据库用户在概念上与操作系统用户完全分离。实践中维持对应关系可能方便,但这不是必需的。数据库用户名在整个数据库集簇安装中是全局的(而不是每个数据库单独的)。要创建用户,使用 CREATE
USER SQL 命令:
CREATE USER name
name 遵循 SQL 标识符的规则:要么是不带特殊字符的普通形式,要么用双引号括起。要移除现有的用户,使用类似的
DROP USER 命令:
DROP USER name
为方便起见,提供了 createuser 和 dropuser 程序作为这些 SQL 命令的包装,可以从 shell 命令行调用:
createusernamedropusername
为了引导数据库系统,新初始化的系统总是包含一个预定义的用户。这个用户的固定 ID 为 1,默认情况下(除非在运行 initdb 时更改)它与初始化数据库集群的操作系统用户同名。习惯上这个用户被命名为 postgres。要创建更多用户,你必须先以这个初始用户身份连接。
与数据库服务器的一个连接恰好只有一个活跃的用户身份。特定数据库连接所用的用户名由发起连接请求的客户端以应用特定的方式指明。例如,
psql 程序用
-U 命令行选项指明要连接的用户。许多应用默认假定当前操作系统用户的名字(包括
createuser 和
psql)。因此,在两组用户之间维持命名对应关系会很方便。
给定的客户端连接可以以哪些数据库用户身份连接,由客户端认证设置决定,如第 6 章所述。(因此,客户端不一定只能以与其操作系统用户同名的用户连接,就像一个人的登录名不受其真实姓名约束一样。)由于用户身份决定了已连接客户端可用的权限集,在建立多用户环境时仔细配置这一点很重要。