4.3. 创建 PostgreSQL 用户


PostgreSQL 用户为以下类型:

  • postgres UNIX 系统用户 - 应该仅用于运行 PostgreSQL 服务器和客户端应用程序,如 pg_dump。不要将 postgres 系统用户用于 PostgreSQL 管理的任何交互式工作,如数据库创建和用户管理。
  • 数据库超级用户 - 默认的 postgres PostgreSQL 超级用户与 postgres 系统用户无关。您可以在 pg_hba.conf 文件中限制 postgres 超级用户的权限,否则没有其他权限限制。您也可以创建其他数据库超级用户。
  • 具有特定数据库访问权限的角色:

    • 数据库用户 - 默认具有登录权限
    • 一组用户 - 启用整个组的管理权限

角色可以拥有数据库对象(如表和函数),并且可以使用 SQL 命令将对象特权分配给其他角色。

标准数据库管理特权包括 SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE

角色属性是特殊的特权,如 LOGINSUPERUSERCREATEDBCREATEROLE

重要

红帽建议以不是超级用户的角色身份执行大部分任务。常见的做法是创建一个具有 CREATEDBCREATEROLE 特权的角色,并将此角色用于所有数据库和角色的日常管理。

先决条件

  • 已安装 PostgreSQL 服务器。
  • 初始化数据库集群。

流程

  • 要创建用户,请为用户设置密码,并为该用户分配 CREATEROLECREATEDB 权限:

    postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;

    mydbuser 替换为用户名,mypasswd 替换为用户的密码。

例 4.1. 初始化、创建和连接到 PostgreSQL 数据库

本例演示如何初始化 PostgreSQL 数据库,创建具有例行数据库管理特权的数据库用户,以及如何创建可通过具有管理特权的任何系统帐户访问的数据库帐户。

  1. 安装 PosgreSQL 服务器:

    # dnf install postgresql-server
  2. 初始化数据库集群:

    # postgresql-setup --initdb
    * Initializing database in '/var/lib/pgsql/data'
    * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
  3. 将密码哈希算法设置为 scram-sha-256

    1. /var/lib/pgsql/data/postgresql.conf 文件中,更改以下行:

      #password_encryption = md5              # md5 or scram-sha-256

      改为:

      password_encryption = scram-sha-256
    2. /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
  4. 启动 postgresql 服务:

    # systemctl start postgresql.service
  5. 以名为 postgres 的系统用户登录:

    # su - postgres
  6. 启动 PostgreSQL 互动终端:

    $ psql
    psql (13.7)
    Type "help" for help.
    
    postgres=#
  7. 可选:获取有关当前数据库连接的信息:

    postgres=# \conninfo
    You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
  8. 创建名为 mydbuser 的用户,为 mydbuser 设置密码,并为 mydbuser 分配 CREATEROLECREATEDB 权限:

    postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;
    CREATE ROLE

    mydbuser 用户现在可以执行日常数据库管理操作:创建数据库并管理用户索引。

  9. 使用 \q meta 命令从互动终端注销:

    postgres=# \q
  10. 注销 postgres 用户会话:

    $ logout
  11. 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=>
  12. 创建名为 mydatabase 的数据库:

    postgres=> CREATE DATABASE mydatabase;
    CREATE DATABASE
    postgres=>
  13. 从会话注销:

    postgres=# \q
  14. mydbuser 用户身份连接到 mydatabase:

    # psql -U mydbuser -h 127.0.0.1 -d mydatabase
    Password for user mydbuser:
    psql (13.7)
    Type "help" for help.
    mydatabase=>
  15. 可选:获取有关当前数据库连接的信息:

    mydatabase=> \conninfo
    You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部