3.3. 创建 PostgreSQL 用户
PostgreSQL 用户为以下类型:
-
postgresLinux 系统用户:只使用它来运行 PostgreSQL 服务器和客户端应用程序,如pg_dump。不要将postgres系统用户用于 PostgreSQL 管理方面的任何交互式工作,如数据库创建和用户管理。 -
数据库超级用户:默认的
postgresPostgreSQL 超级用户与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 - postgresCopy 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 ROLECopy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser用户现在可以执行日常数据库管理操作:创建数据库并管理用户索引。使用
\qmeta 命令从交互终端退出:postgres=# \q
postgres=# \qCopy 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=# \qCopy 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