4.2. 创建 PostgreSQL 用户
PostgreSQL 用户为以下类型:
-
postgres
UNIX 系统用户 - 应该仅用于运行 PostgreSQL 服务器和客户端应用程序,如pg_dump
。不要将postgres
系统用户用于 PostgreSQL 管理的任何交互式工作,如数据库创建和用户管理。 -
数据库超级用户 - 默认的
postgres
PostgreSQL 超级用户与postgres
系统用户无关。您可以在pg_hba.conf
文件中限制postgres
超级用户的权限,否则没有其他权限限制。您也可以创建其他数据库超级用户。 具有特定数据库访问权限的角色:
- 数据库用户 - 默认具有登录权限
- 一组用户 - 启用整个组的管理权限
角色可以拥有数据库对象(如表和函数),并且可以使用 SQL 命令将对象特权分配给其他角色。
标准数据库管理特权包括 SELECT
、INSERT
、UPDATE
、DELETE
、TRUNCATE
、REFERENCES
、TRIGGER
、CREATE
、CONNECT
、TEMPORARY
、EXECUTE
和 USAGE
。
角色属性是特殊的特权,如 LOGIN
、SUPERUSER
、CREATEDB
和 CREATEROLE
。
红帽建议以不是超级用户的角色身份执行大部分任务。常见的做法是创建一个具有 CREATEDB
和 CREATEROLE
特权的角色,并将此角色用于所有数据库和角色的日常管理。
先决条件
- 已安装 PostgreSQL 服务器。
- 初始化数据库集群。
流程
要创建用户,请为用户设置密码,并为该用户分配
CREATEROLE
和CREATEDB
权限:postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;
将 mydbuser 替换为用户名,mypasswd 替换为用户的密码。
例 4.1. 初始化、创建和连接到 PostgreSQL 数据库
本例演示如何初始化 PostgreSQL 数据库,创建具有例行数据库管理特权的数据库用户,以及如何创建可通过具有管理特权的任何系统帐户访问的数据库帐户。
安装 PosgreSQL 服务器:
# dnf install postgresql-server
初始化数据库集群:
# postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
将密码哈希算法设置为
scram-sha-256
。在
/var/lib/pgsql/data/postgresql.conf
文件中,更改以下行:#password_encryption = md5 # md5 or scram-sha-256
改为:
password_encryption = scram-sha-256
在
/var/lib/pgsql/data/pg_hba.conf
文件中,更改 IPv4 本地连接的以下行:host all all 127.0.0.1/32 ident
改为:
host all all 127.0.0.1/32 scram-sha-256
启动 postgresql 服务:
# systemctl start postgresql.service
以名为
postgres
的系统用户登录:# su - postgres
启动 PostgreSQL 互动终端:
$ psql psql (13.7) Type "help" for help. postgres=#
可选:获取有关当前数据库连接的信息:
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
创建名为
mydbuser
的用户,为mydbuser
设置密码,并为mydbuser
分配CREATEROLE
和CREATEDB
权限:postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLE
mydbuser
用户现在可以执行日常数据库管理操作:创建数据库并管理用户索引。使用
\q
meta 命令从互动终端注销:postgres=# \q
注销
postgres
用户会话:$ logout
以
mydbuser
用户身份登录 PostgreSQL 终端,指定主机名并连接到默认的postgres
数据库,该数据库在初始化过程中创建:# psql -U mydbuser -h 127.0.0.1 -d postgres Password for user mydbuser: Type the password. psql (13.7) Type "help" for help. postgres=>
创建名为
mydatabase
的数据库:postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>
从会话注销:
postgres=# \q
以
mydbuser
用户身份连接到 mydatabase:# psql -U mydbuser -h 127.0.0.1 -d mydatabase Password for user mydbuser: psql (13.7) Type "help" for help. mydatabase=>
可选:获取有关当前数据库连接的信息:
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".