第 7 章 数据库用户和权限
管理数据库用户及其权限在概念上类似于 Unix 操作系统的做法,但又没有相似到不需要解释的程度。
7.1. 数据库用户 #
数据库用户在概念上与任何操作系统用户完全分离。实践中维持对应关系可能方便,但这不是必需的。数据库用户名在整个数据库集簇安装中是全局的(而不是每个数据库单独的)。要创建用户,使用
CREATE USER SQL 命令:
CREATE USER name
name 遵循 SQL 标识符的规则:要么是不带特殊字符的普通形式,要么用双引号括起。要移除现有的用户,使用类似的 DROP USER 命令。
为了方便,shell 脚本
createuser 和
dropuser 是这些
SQL 命令的包装。
为了引导数据库系统,新初始化的系统总是包含一个预定义的用户。这个用户与初始化该区域的操作系统用户同名(并且大概也被用作运行服务器的用户)。因此,通常存在一个初始用户 “postgres”。要创建更多用户,你必须先以这个初始用户身份连接。
特定数据库连接所用的用户名由发起连接请求的客户端以应用特定的方式指明。例如,psql 程序用
-U
命令行选项指明要连接的用户。给定客户端连接可以以哪些数据库用户身份连接,由客户端认证设置决定,如第 4 章所述。(因此,客户端不一定只能与其操作系统用户同名,就像一个人的登录名不受其真实姓名约束一样。)
7.1.1. 用户属性 #
数据库用户可以具有一些定义其权限并与客户端认证系统交互的属性。
- superuser
数据库超级用户绕过所有权限检查。而且,只有超级用户才能创建新用户。要创建数据库超级用户,使用
CREATE USER name CREATEUSER。- 数据库创建
必须显式给用户创建数据库的权限(超级用户除外,因为超级用户绕过所有权限检查)。要创建这样的用户,使用
CREATE USER name CREATEDB。- password
只有当客户端认证使用口令认证时,口令才有意义。数据库口令与任何操作系统口令都是分开的。创建用户时按
CREATE USER name WITH PASSWORD 'string'的形式指定口令。
See the reference pages for CREATE USER and
ALTER USER for details.