↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 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 章中所述。(因此,客户端并不一定限于只能以与其操作系统用户同名的用户连接,正如一个人的登录名不必与其真实姓名一致。)由于用户身份决定了已连接客户端可用的权限集合,所以在设置多用户环境时,仔细配置这一点非常重要。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。