↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 8.0 已结束支持。 请参阅 当前版本手册.

第 17 章 数据库用户和权限

每个数据库集簇都包含一组数据库用户。这些用户与运行服务器的操作系统所管理的用户是相互独立的。用户拥有数据库对象(例如表),并且可以把这些对象上的权限赋予其他用户,以控制谁能访问哪些对象。

本章描述如何创建和管理用户,并介绍权限系统。关于各种数据库对象类型和权限效果的更多信息,见第 5 章。

17.1. 数据库用户 #

数据库用户在概念上与操作系统用户完全分离。在实践中,维持两者之间的对应关系可能比较方便,但这并非必需。数据库用户名在整个数据库集簇安装中是全局的(而非每个数据库各自独立)。要创建用户,请使用CREATE USER SQL 命令:

CREATE USER name;

name 遵循 SQL 标识符规则:要么不加修饰且不含特殊字符,要么用双引号括起。要移除现有用户,请使用类似的DROP USER命令:

DROP USER name;

为了方便,提供了createuser和dropuser程序,作为这些 SQL 命令的包装器,可以从 shell 命令行调用:

createuser name
dropuser name

要确定现有用户的集合,请查看 pg_user 系统目录,例如

SELECT usename FROM pg_user;

使用psql程序的 \du 元命令也可以列出现有用户。

为了完成数据库系统的初始引导,一个刚初始化的系统总会包含一个预定义用户。该用户将拥有固定的 ID 1,并且默认情况下(除非在运行initdb时另行指定)它与初始化数据库集簇的操作系统用户同名。这个用户通常命名为postgres。要创建更多用户,必须先以这个初始用户建立连接。

每个到数据库服务器的连接中恰好只有一个用户身份处于活动状态。某个数据库连接要使用的用户名,由发起连接请求的客户端以应用特定的方式指明。例如,psql程序使用-U命令行选项来指明要以哪个用户连接。很多应用默认假定使用当前操作系统用户的名字(包括createuser和psql)。因此,在这两组用户之间维护命名对应关系通常比较方便。

某个客户端连接能够以哪些数据库用户进行连接,由客户端认证设置决定,如第 19 章中所述。(因此,客户端并不一定限于只能以与其操作系统用户同名的用户连接,正如一个人的登录名不必与其真实姓名一致。)由于用户身份决定了已连接客户端可用的权限集合,所以在设置多用户环境时,仔细配置这一点非常重要。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.