管理数据库用户和他们的权限概念上类似于 Unix 操作系统, 但是还是不完全一样,所以要解释.
数据库用户从概念上与操作系统用户是完全无关的. 在实际使用中把它们对应起来可能比较方便,但不是必须的. 数据库用户名在整个数据库集群中是全局的(而不是每个库不同). 要创建一个用户,使用 SQL 命令 CREATE USER:
CREATE USER namename 遵循 SQL 标识的规则: 要么完全没有特殊字符,要么用双引号引起. 要删除一个现有用户,使用类似的命令 DROP USER.
为了方便,shell脚本createuser和 dropuser 封装了这些 SQL 命令.
为了能初创数据库系统,新建立的数据库总是包含一个预定义的用户. 这个用户将和初始化该数据区的用户有相同的名称(并且也可以预料 到是运行服务器的用户).因此,初始用户“postgres” 总是存在.为了创建更多用户,你必须首先以这个初始用户身份联接.
使用特定数据库联接的用户名是由初始化联接请求的应用声明的, 而且其风格就是该应用的风格.比如,psql 程序使用-U命令行选项声明它代表的进行联接 的用户.一个客户端联接可以用来联接的数据库用户集合是由客户 认证设置决定的,在 Chapter 4 里面有解释.(因此,一个客户端并不局限于以它的操作系统用户 同名的用户进行联接,就象你登录系统的名称不一定要是你的真实 名称一样.)
一个数据库用户可以有一系列属性,这些属性定义他的权限,以及与 客户认证系统的交互.
数据库超级用户超越所有权限检查.同样,只有超级用户才能 创建新的用户.要创建数据库超级用户,用 CREATE USER name CREATEUSER.
用户要想创建数据库,必须明确给出权限(对于超级用户是例外,因为 他们超越所有权限检查).要创建这样的用户,用 CREATE USER name CREATEDB.
只有在对客户认证使用了口令认证后,口令才比较重要. 数据库口令与操作系统口令是无关的.在创建用户的时候 声明一个口令是这样: CREATE USER name WITH PASSWORD 'string'.