3.3. 创建 PostgreSQL 用户
PostgreSQL 用户为以下类型:
-
postgres
Linux 系统用户:只使用它来运行 PostgreSQL 服务器和客户端应用程序,如pg_dump
。不要将postgres
系统用户用于 PostgreSQL 管理方面的任何交互式工作,如数据库创建和用户管理。 -
数据库超级用户:默认的
postgres
PostgreSQL 超级用户与postgres
系统用户无关。您可以在/var/lib/pgsql/data/pg_hba.conf
文件中限制postgres
超级用户的访问,否则不存在其他权限限制。您也可以创建其他数据库超级用户。 具有特定数据库访问权限的角色:
- A database user:具有默认登录的权限。
- A group of users:启用管理整个组的权限。
角色可以拥有数据库对象(如表和函数),并且可以使用 SQL 命令将对象特权分配给其他角色。
标准数据库管理特权包括 SELECT
、INSERT
、UPDATE
、DELETE
、TRUNCATE
、REFERENCES
、TRIGGER
、CREATE
、CONNECT
、TEMPORARY
、EXECUTE
和 USAGE
。
角色属性是特殊的特权,如 LOGIN
、SUPERUSER
、CREATEDB
和 CREATEROLE
。
以不是超级用户的角色执行大部分任务。常见的做法是创建一个具有 CREATEDB
和 CREATEROLE
特权的角色,并将此角色用于所有数据库和角色的日常管理。
先决条件
- PostgreSQL 服务器已安装。
- 数据库集群已初始化。
-
/var/lib/pgsql/data/postgresql.conf
文件中的password_encryption
参数已设为scram-sha-256
。 -
/var/lib/pgsql/data/pg_hba.conf
文件中的条目使用scram-sha-256
哈希算法作为身份验证方法。
流程
以
postgres
系统用户身份登录,或切换到这个用户:su - postgres
# su - postgres
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动 PostgreSQL 交互式终端:
psql
$ psql psql (16.4) 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
的用户,为其设置密码,并向用户分配CREATEROLE
和CREATEDB
权限:postgres=# CREATE USER mydbuser WITH PASSWORD '<password>' CREATEROLE CREATEDB; CREATE ROLE
postgres=# CREATE USER mydbuser WITH PASSWORD '<password>' CREATEROLE CREATEDB; CREATE ROLE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser
用户现在可以执行日常数据库管理操作:创建数据库并管理用户索引。使用
\q
meta 命令从交互终端退出:postgres=# \q
postgres=# \q
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以
mydbuser
用户身份登录到 PostgreSQL 终端,指定主机名,并连接到默认的postgres
数据库,该数据库是在初始化过程中创建的:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建数据库:
postgres=> CREATE DATABASE <db_name>;
postgres=> CREATE DATABASE <db_name>;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 退出会话:
postgres=# \q
postgres=# \q
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以
mydbuser
用户身份连接到新数据库:psql -U mydbuser -h 127.0.0.1 -d <db_name>
# psql -U mydbuser -h 127.0.0.1 -d <db_name> Password for user mydbuser: psql (16.4) Type "help" for help. mydatabase=>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow