暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL、Oracle、PostgreSQL数据库管理员密码重置指南

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者比较重要的内容,希望大家能够喜欢,不足之处请大家多宝贵地意见,我们一起提升,守住自己的饭碗。

正文开始

 


适用场景: 当您忘记了数据库系统(MySQL, Oracle, PostgreSQL)的超级管理员(如 root
sys
postgres
)密码,需要重置以重新获得管理权限时。

重要安全提示:

  1. 1. 权限要求: 以下操作通常需要操作系统的 root
     (Linux/Unix) 或 Administrator
     (Windows)
     权限,因为需要停止数据库服务、修改配置文件或创建特殊文件。
  2. 2. 服务中断: 重置密码需要停止数据库服务。请务必在维护窗口进行操作,避免影响生产环境。
  3. 3. 生产环境谨慎: 在生产环境执行此类操作前,务必进行备份(数据库和配置文件),并在测试环境验证步骤。
  4. 4. 最小权限原则: 重置后,请立即使用新密码登录并修改为强密码。避免长时间使用临时或弱密码。
  5. 5. 审计: 记录操作过程、时间、操作人员,符合审计要求。
  6. 6. 云数据库注意: 对于云服务商托管的数据库(如 RDS, Cloud SQL, Azure Database 等),通常不提供操作系统访问权限。忘记密码时,请使用云服务商提供的管理控制台或API进行密码重置(通常有专门的功能按钮),本手册的某些步骤可能不适用。

第一部分:MySQL MariaDB 密码重置

方法一:使用 --skip-grant-tables
 启动 (推荐)

这是最常用且相对安全的方法。

  1. 1. 停止 MySQL 服务:
    • • Linux (Systemd):
      sudo systemctl stop mysql    # 或 mysqld, mariadb
    • • Linux (SysVinit):
      sudo service mysql stop     # 或 mysqld, mariadb
    • • Windows:
      使用“服务”管理工具 (services.msc
      ) 停止 "MySQL" 或 "MariaDB" 服务,或在管理员命令提示符下:
      net stop MySQL
  2. 2. 以跳过权限表方式启动 MySQL:
    • • Linux:
      sudo mysqld_safe --skip-grant-tables --skip-networking &
      • • --skip-networking
        : 禁止远程连接,增强临时状态下的安全性(可选但强烈推荐)。
      • • &
        : 放入后台运行。
    • • Windows:
      找到 MySQL 的安装目录(如 C:\Program Files\MySQL\MySQL Server X.Y\bin
      ),在管理员命令提示符下:
      mysqld --skip-grant-tables --skip-networking
      保持此窗口运行(不要关闭)。
  3. 3. 无密码连接 MySQL:
    • • 打开另一个终端或命令提示符窗口。
    • • 连接 MySQL:
      mysql -u root
      (在 Windows 上,确保在包含 mysql.exe
       的目录下运行,或将该目录加入系统 PATH)。
  4. 4. 刷新权限并重置密码 (MySQL 5.7.6+ MariaDB 10.4+):
    FLUSH PRIVILEGES; -- 必须先执行这个,让后续权限操作生效
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!';
    FLUSH PRIVILEGES; -- 再次刷新

    将 'YourNewStrongPassword!'
     替换为您设定的强密码。
  5. 5. 重置密码 (较旧版本 MySQL < 5.7.6):
    FLUSH PRIVILEGES;
    UPDATE mysql.user SET authentication_string = PASSWORD('YourNewStrongPassword!'WHERE User = 'root' AND Host = 'localhost';
    FLUSH PRIVILEGES;

  6. 6. 退出 MySQL:
    quit;
  7. 7. 正常重启 MySQL 服务:
    • • Linux (--skip-grant-tables
       窗口):
       找到 mysqld_safe
       进程的 PID (使用 ps aux | grep mysqld
      ),然后 sudo kill PID
      。或者直接 sudo killall mysqld
       / sudo killall mysqld_safe
      。然后启动服务:
      sudo systemctl start mysql   # 或 mysqld, mariadb
    • • Windows (--skip-grant-tables
       窗口):
       按 Ctrl+C
       停止运行中的 mysqld
      。然后使用“服务”管理工具或 net start MySQL
       启动服务。
  8. 8. 使用新密码登录:
    mysql -u root -p
    输入您设置的新密码。

方法二:使用 init-file
 (可选)

此方法在启动时自动执行 SQL 文件修改密码,无需手动连接。

  1. 1. 创建 SQL 文件 (如 /tmp/reset_root.sql
    ):
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!';
    -- 或者对于旧版: UPDATE mysql.user SET authentication_string = PASSWORD('...') ... (同方法一步骤5)

  2. 2. 停止 MySQL 服务 (同方法一步骤1)。
  3. 3. 以 --init-file
     参数启动:
    • • Linux:
      sudo mysqld_safe --init-file=/tmp/reset_root.sql &
    • • Windows:
      mysqld --init-file="C:\Path\To\reset_root.sql"
  4. 4. 等待服务启动并执行文件后,正常停止 MySQL (可能需要观察日志确认执行完成)。
  5. 5. 移除或重命名 SQL 文件 (防止下次启动再次执行)。
  6. 6. 正常启动 MySQL 服务
  7. 7. 使用新密码登录

第二部分:Oracle Database 密码重置

方法一:本地操作系统认证 (最常见)

Oracle 允许属于 dba
 或 oper
 操作系统组的用户直接登录数据库,无需密码。oracle
 用户通常在这些组里。

  1. 1. 连接到数据库服务器: 以 oracle
     用户身份登录(或具有 dba/oper
     组权限的用户)。
  2. 2. 设置 Oracle 环境变量:
    source /u01/app/oracle/product/19.0.0/dbhome_1/bin/oraenv  # 路径根据实际安装调整
    ORACLE_SID=your_sid  # 设置要修改的目标数据库实例 SID
    export ORACLE_SID

  3. 3. 使用 SQL*Plus 以 / AS SYSDBA
     连接:
    sqlplus  as sysdba
    这应该能直接登录到 SQL 提示符 (SQL>
    )。
  4. 4. 修改 SYS
     或其他用户密码:
    ALTER USER sys IDENTIFIED BY YourNewStrongPassword!;
    ALTER USER system IDENTIFIED BY YourNewStrongPassword!-- 通常也需要重置 SYSTEM

    将 YourNewStrongPassword!
     替换为强密码。
  5. 5. 退出 SQL*Plus:
    EXIT;

方法二:使用密码文件 (orapwd
)

如果本地认证不可用(如远程管理或特定配置),或者需要重置密码文件本身。

  1. 1. 定位并备份现有密码文件:
    • • 默认位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID
       (Unix/Linux), %ORACLE_HOME%\database\PWD%ORACLE_SID%.ora
       (Windows)。
    • • 备份:cp orapw$ORACLE_SID orapw$ORACLE_SID.bak
  2. 2. 停止 Oracle 数据库实例:
    sqlplus  as sysdba
    SQL> SHUTDOWN IMMEDIATE;
    SQL> EXIT;

    如果无法用 / as sysdba
     连接(密码文件损坏或丢失),可能需要强制终止进程(风险高,谨慎操作)。
  3. 3. 使用 orapwd
     工具重建密码文件:
    orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=YourNewStrongPassword! entries=10 force=y
    • • file
      : 新密码文件路径和名称。
    • • password
      : 为 SYS
       用户设置的新密码。
    • • entries
      : 密码文件中可存储的最大特权用户数。
    • • force=y
      : 覆盖已存在的密码文件。
  4. 4. 启动数据库实例:
    sqlplus  as sysdba
    SQL> STARTUP;
    SQL> EXIT;

  5. 5. 验证:
    使用新密码连接 SYS
    sqlplus sys/YourNewStrongPassword!@your_service as sysdba
    如果需要重置 SYSTEM
     或其他用户密码,登录后用 ALTER USER
     修改(同方法一步骤4)。

第三部分:PostgreSQL 密码重置

PostgreSQL 通过 pg_hba.conf
 文件控制认证方式。重置密码需要临时允许本地信任认证。

  1. 1. 停止 PostgreSQL 服务:
    • • Linux (Systemd):
      sudo systemctl stop postgresql
    • • Linux (SysVinit):
      sudo service postgresql stop
    • • Windows:
      使用“服务”管理工具 (services.msc
      ) 停止 "postgresql-XX" 服务,或在管理员命令提示符下:
      net stop postgresql-XX  # XX 代表版本号,如 14
  2. 2. 修改 pg_hba.conf
     允许本地信任认证:
    • • 找到 pg_hba.conf
       文件。常见位置:
      • • Linux: /etc/postgresql/XX/main/pg_hba.conf
        /var/lib/pgsql/XX/data/pg_hba.conf
      • • Windows: C:\Program Files\PostgreSQL\XX\data\pg_hba.conf
    • • 备份该文件。
    • • 在文件开头附近,找到针对 localhost
       (IPv4/IPv6 127.0.0.1/::1
      ) 和 local
       (Unix-domain socket) 的条目,将其认证方法 (METHOD
      ) 临时改为 trust
      。例如:
      # TYPE  DATABASE        USER            ADDRESS                 METHOD
      # 修改前可能是 md5 或 scram-sha-256
      host    all             all             127.0.0.1/32            trust   # 修改这行
      host    all             all             ::1/128                 trust   # 修改这行
      local   all             all                                     trust   # 修改这行

      确保这些行在文件顶部或没有其他更严格的规则覆盖它们。
  3. 3. 启动 PostgreSQL 服务:
    • • Linux:
      sudo systemctl start postgresql
    • • Windows: 启动 "postgresql-XX" 服务。
  4. 4. 无密码连接 PostgreSQL (作为 postgres
     用户):
    • • Linux: 切换到 postgres
       系统用户:
      sudo -u postgres psql
    • • Windows: 打开命令提示符(无需管理员),使用 psql
       (确保在 PATH 中) 并指定用户:
      psql -U postgres
      由于 pg_hba.conf
       设置为 trust
      ,此时应无需密码即可登录到 psql
       提示符 (postgres=#
      )。
  5. 5. 重置 postgres
     用户密码:
    ALTER USER postgres WITH PASSWORD 'YourNewStrongPassword!';
    将 'YourNewStrongPassword!'
     替换为强密码。
  6. 6. 退出 psql
    :
    \q
  7. 7. 恢复 pg_hba.conf
     配置:
    • • 停止 PostgreSQL 服务 (步骤1)。
    • • 将 pg_hba.conf
       中刚才修改的 trust
       条目恢复为原来的认证方法(通常是 scram-sha-256
       或 md5
      )。
    • • 保存文件。
  8. 8. 启动 PostgreSQL 服务 (步骤3)。
  9. 9. 使用新密码登录:
    psql -U postgres -W  # Linux 或 Windows
    输入您设置的新密码。

 

注:以上文章来源于deepseek,生产请进行测试后再使用。


END
往期文章回顾

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。



文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论