PostgreSQL 18 默认密码修改全指南:从安装到安全加固

PostgreSQL 18 默认密码修改全指南:从安装到安全加固

引言

数据库安全是企业和开发者不可忽视的重要环节,而默认密码往往是数据库安全的第一道防线。PostgreSQL作为一款广泛使用的开源关系型数据库,其默认密码设置和修改方法是每个数据库管理员和开发者必须掌握的基础知识。本文将以PostgreSQL 18为例,详细介绍默认密码的情况、修改方法以及安全加固建议。

一、PostgreSQL 18 默认密码背景

1. 初始默认状态

在Ubuntu系统中,PostgreSQL 18安装完成后:

  • 会自动创建一个名为postgres的系统用户
  • 默认的postgres数据库用户初始无密码 ,采用操作系统认证(peer或ident模式)
  • 本地连接时,只需切换到postgres系统用户即可直接登录,无需密码

2. 本次安装的默认密码

根据我们的自动化安装脚本postgresql18_quick_install.sh,安装过程中已经主动设置了默认密码:

  • 默认密码:your_secure_password
  • 设置命令:ALTER USER postgres WITH PASSWORD 'your_secure_password';

⚠️ 安全警示 :这个默认密码仅用于演示,生产环境必须立即修改,否则存在严重安全风险!

二、修改默认密码的详细步骤

方法1:本地直接修改(推荐)

这种方法适用于可以直接访问服务器的场景,步骤如下:

  1. 切换到postgres系统用户

    bash 复制代码
    sudo su - postgres
  2. 登录PostgreSQL

    bash 复制代码
    psql
  3. 修改密码

    sql 复制代码
    ALTER USER postgres WITH PASSWORD '您的强密码';

    建议密码包含:大小写字母、数字、特殊字符,长度至少12位

  4. 退出PostgreSQL

    sql 复制代码
    \q
  5. 退出postgres用户

    bash 复制代码
    exit

方法2:通过sudo直接执行命令

如果不想切换用户,可以使用sudo直接执行命令:

bash 复制代码
# 1. 直接在命令行修改密码
echo "ALTER USER postgres WITH PASSWORD '您的强密码';" | sudo -u postgres psql

# 2. 或使用here-doc方式
sudo -u postgres psql <<EOF
ALTER USER postgres WITH PASSWORD '您的强密码';
EOF

方法3:使用脚本批量修改(适合远程操作)

对于远程服务器或需要批量操作的场景,可以使用脚本方式修改密码,避免复杂的引号嵌套问题:

  1. 创建脚本文件 change_pg_password.sh

    bash 复制代码
    #!/bin/bash
    
    # 替换为您的sudo密码和新的PostgreSQL密码
    SUDO_PASSWORD="<您的sudo密码>"
    NEW_PG_PASSWORD="<您的新密码>"
    
    # 执行密码修改命令
    echo "$SUDO_PASSWORD" | sudo -S -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$NEW_PG_PASSWORD'"
    
    echo "Password changed successfully!"
  2. 给脚本添加执行权限

    bash 复制代码
    chmod +x change_pg_password.sh
  3. 执行脚本

    bash 复制代码
    bash change_pg_password.sh
  4. 远程执行脚本(可选)

    bash 复制代码
    # 上传脚本到远程服务器
    scp -P <端口号> change_pg_password.sh <用户名>@<服务器IP地址>:~
    
    # 远程执行脚本
    ssh -t -p <端口号> <用户名>@<服务器IP地址> "bash ~/change_pg_password.sh"

这种方法特别适合在PowerShell等复杂引号环境下执行远程操作,避免了引号嵌套的困扰。

三、验证密码修改是否成功

修改密码后,我们需要验证修改是否生效,可以通过以下方法:

方法1:本地密码连接测试

bash 复制代码
# 使用-W参数提示输入密码
psql -U postgres -h localhost -W

# 或使用PGPASSWORD环境变量(仅用于测试,不推荐生产使用)
PGPASSWORD='您的新密码' psql -U postgres -h localhost -c 'SELECT version();'

方法2:远程连接测试

如果需要远程连接,确保已配置好pg_hba.conf允许密码认证,然后使用:

bash 复制代码
# 从远程机器连接
psql -U postgres -h <服务器IP> -p 5432 -W

方法3:查看用户密码状态

bash 复制代码
sudo -u postgres psql -c "SELECT usename, passwd FROM pg_shadow WHERE usename = 'postgres';"

注意:PostgreSQL会对密码进行哈希处理,无法直接查看明文密码,只能确认用户存在且密码已设置

四、密码修改后的安全加固建议

1. 配置pg_hba.conf,限制访问权限

编辑pg_hba.conf文件,根据实际需求调整认证方式:

bash 复制代码
sudo nano /etc/postgresql/18/main/pg_hba.conf

推荐配置:

  • 本地连接使用peer认证
  • 远程连接使用md5或scram-sha-256密码认证
  • 限制允许连接的IP地址范围

2. 启用强密码策略

postgresql.conf中配置密码策略:

bash 复制代码
# 启用密码复杂度检查
password_encryption = scram-sha-256

# 设置密码有效期
# password_valid_until = '2025-12-31'

3. 定期更换密码

建立定期密码更换机制,建议每3-6个月更换一次数据库密码。

4. 使用密码管理器

对于复杂的强密码,建议使用专业的密码管理器(如1Password、Bitwarden)进行管理,避免密码丢失或泄露。

五、常见问题与解决方案

问题1:忘记postgres用户密码怎么办?

解决方案

  1. 停止PostgreSQL服务

    bash 复制代码
    sudo systemctl stop postgresql@18-main
  2. 以单用户模式启动

    bash 复制代码
    sudo -u postgres postgres --single -D /var/lib/postgresql/18/main
  3. 在单用户模式下修改密码

    sql 复制代码
    ALTER USER postgres WITH PASSWORD '新密码';
  4. 退出单用户模式(按Ctrl+D)

  5. 重启PostgreSQL服务

    bash 复制代码
    sudo systemctl start postgresql@18-main

问题2:远程连接提示"password authentication failed"?

解决方案

  1. 检查pg_hba.conf是否允许远程IP访问
  2. 确认密码输入正确
  3. 检查postgresql.conflisten_addresses是否设置为'*'

六、总结

PostgreSQL 18默认密码的修改是数据库安全加固的基础步骤,通过本文的详细指南,您应该已经掌握了:

  1. PostgreSQL 18默认密码的背景情况
  2. 两种修改默认密码的方法(本地直接修改和sudo命令修改)
  3. 如何验证密码修改是否成功
  4. 密码修改后的安全加固建议
  5. 常见问题的解决方案

安全无小事,请务必重视数据库默认密码的修改和管理,建立完善的数据库安全管理制度,保护您的数据资产安全。

希望本文对您有所帮助,如果您有任何问题或建议,欢迎在评论区留言讨论!

参考资源

相关推荐
我是永恒8 分钟前
PostgreSQL数据库安装配置连接Paperclip
数据库·postgresql
一个天蝎座 白勺 程序猿16 分钟前
踩坑生产后整理:KingbaseES表空间管理、auto_createtblspcdir参数深度解析与运维最佳实践
运维·数据库·kingbasees
oG99bh7CK25 分钟前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
数据库·postgresql·fastapi
Wait....27 分钟前
MySQL事务知识复习
数据库·mysql
云栖梦泽1 小时前
【AI】AI安全工具:AI模型安全检测工具的实战使用
人工智能·安全·机器学习
杨云龙UP1 小时前
Oracle 19c:RMAN Duplicate异机复制数据库实操_20260402
linux·运维·服务器·数据库·网络协议·tcp/ip·oracle
刘~浪地球1 小时前
Redis 从入门到精通(七):集合操作详解
数据库·chrome·redis
光泽雨1 小时前
SQL分组Group By
数据库
IeE1QQ3GT1 小时前
FastAPI + SQLite:从基础CRUD到安全并发的实战指南
安全·sqlite·fastapi
我真会写代码1 小时前
MySQL高频面试题(含详细解析):从基础到高级,备战面试不踩坑
数据库·mysql·面试