4.3. 创建 PostgreSQL 用户
PostgreSQL 用户为以下类型:
-
postgresUNIX 系统用户 - 应该仅用于运行 PostgreSQL 服务器和客户端应用程序,如pg_dump。不要将postgres系统用户用于 PostgreSQL 管理的任何交互式工作,如数据库创建和用户管理。 -
数据库超级用户 - 默认的
postgresPostgreSQL 超级用户与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;
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 mydbuser 替换为用户名,mypasswd 替换为用户的密码。
例 4.1. 初始化、创建和连接到 PostgreSQL 数据库
本例演示如何初始化 PostgreSQL 数据库,创建具有例行数据库管理特权的数据库用户,以及如何创建可通过具有管理特权的任何系统帐户访问的数据库帐户。
安装 PosgreSQL 服务器:
dnf install postgresql-server
# dnf install postgresql-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化数据库集群:
postgresql-setup --initdb
# postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将密码哈希算法设置为
scram-sha-256。在
/var/lib/pgsql/data/postgresql.conf文件中,更改以下行:#password_encryption = md5 # md5 or scram-sha-256
#password_encryption = md5 # md5 or scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 改为:
password_encryption = scram-sha-256
password_encryption = scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/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 identCopy to Clipboard Copied! Toggle word wrap Toggle overflow 改为:
host all all 127.0.0.1/32 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow
启动 postgresql 服务:
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以名为
postgres的系统用户登录:su - postgres
# su - postgresCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 PostgreSQL 互动终端:
psql
$ psql psql (13.7) Type "help" for help. postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:获取有关当前数据库连接的信息:
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
mydbuser的用户,为mydbuser设置密码,并为mydbuser分配CREATEROLE和CREATEDB权限:postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLE
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLECopy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser用户现在可以执行日常数据库管理操作:创建数据库并管理用户索引。使用
\qmeta 命令从互动终端注销:postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注销
postgres用户会话:logout
$ logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
mydbuser用户身份登录 PostgreSQL 终端,指定主机名并连接到默认的postgres数据库,该数据库在初始化过程中创建:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
mydatabase的数据库:postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>
postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从会话注销:
postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
mydbuser用户身份连接到 mydatabase:psql -U mydbuser -h 127.0.0.1 -d mydatabase
# psql -U mydbuser -h 127.0.0.1 -d mydatabase Password for user mydbuser: psql (13.7) Type "help" for help. mydatabase=>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:获取有关当前数据库连接的信息:
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".Copy to Clipboard Copied! Toggle word wrap Toggle overflow