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;
    Copy to Clipboard Toggle word wrap

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

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

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

  1. 安装 PosgreSQL 服务器:

    # dnf install postgresql-server
    Copy to Clipboard Toggle word wrap
  2. 初始化数据库集群:

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

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

      #password_encryption = md5              # md5 or scram-sha-256
      Copy to Clipboard Toggle word wrap

      改为:

      password_encryption = scram-sha-256
      Copy to Clipboard Toggle word wrap
    2. /var/lib/pgsql/data/pg_hba.conf 文件中,更改 IPv4 本地连接的以下行:

      host    all             all             127.0.0.1/32            ident
      Copy to Clipboard Toggle word wrap

      改为:

      host    all             all             127.0.0.1/32            scram-sha-256
      Copy to Clipboard Toggle word wrap
  4. 启动 postgresql 服务:

    # systemctl start postgresql.service
    Copy to Clipboard Toggle word wrap
  5. 以名为 postgres 的系统用户登录:

    # su - postgres
    Copy to Clipboard Toggle word wrap
  6. 启动 PostgreSQL 互动终端:

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

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

    postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;
    CREATE ROLE
    Copy to Clipboard Toggle word wrap

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

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

    postgres=# \q
    Copy to Clipboard Toggle word wrap
  10. 注销 postgres 用户会话:

    $ logout
    Copy to Clipboard Toggle word wrap
  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=>
    Copy to Clipboard Toggle word wrap
  12. 创建名为 mydatabase 的数据库:

    postgres=> CREATE DATABASE mydatabase;
    CREATE DATABASE
    postgres=>
    Copy to Clipboard Toggle word wrap
  13. 从会话注销:

    postgres=# \q
    Copy to Clipboard Toggle word wrap
  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=>
    Copy to Clipboard Toggle word wrap
  15. 可选:获取有关当前数据库连接的信息:

    mydatabase=> \conninfo
    You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat