如何批量修改Oracle Database 19c所有用户的密码?
批量修改Oracle 19c所有用户密码(开发测试环境)
操作步骤
1. 以SYSDBA身份登录数据库
打开终端执行命令:
sqlplus / as sysdba
2. 获取初始密码的哈希值(可选,精准匹配)
Oracle存储的是密码哈希而非明文,若仅需修改初始密码为password123的用户,先创建临时用户获取对应哈希:
CREATE USER temp_user IDENTIFIED BY password123; SELECT password FROM dba_users WHERE username = 'TEMP_USER'; DROP USER temp_user;
复制输出的哈希值(格式类似S:9E8F6D...)备用。
3. 执行批量修改脚本
方案一:仅修改初始密码为password123的用户
将v_old_hash的值替换为上一步获取的哈希:
SET SERVEROUTPUT ON; DECLARE v_old_hash VARCHAR2(100) := '替换为你的初始密码哈希'; BEGIN FOR rec IN ( SELECT username FROM dba_users WHERE password = v_old_hash AND account_status = 'OPEN' AND username NOT IN ('ANONYMOUS', 'XS$NULL') -- 排除无需修改的内置用户 ) LOOP EXECUTE IMMEDIATE 'ALTER USER ' || rec.username || ' IDENTIFIED BY password456'; DBMS_OUTPUT.PUT_LINE('已更新用户: ' || rec.username); END LOOP; END; /
方案二:修改所有已启用的用户(开发测试环境直接用)
如果不需要精准匹配初始密码,直接修改所有正常启用的用户:
SET SERVEROUTPUT ON; BEGIN FOR rec IN ( SELECT username FROM dba_users WHERE account_status = 'OPEN' AND username NOT IN ('ANONYMOUS', 'XS$NULL', 'MGMT_VIEW') ) LOOP EXECUTE IMMEDIATE 'ALTER USER ' || rec.username || ' IDENTIFIED BY password456'; DBMS_OUTPUT.PUT_LINE('已更新用户: ' || rec.username); END LOOP; END; /
4. 验证修改结果
执行以下语句确认用户状态及密码更新情况:
SELECT username, account_status FROM dba_users WHERE account_status = 'OPEN';
重要提醒
- 此操作仅适用于开发测试环境,生产环境严禁批量修改所有用户密码
- 保留
ANONYMOUS、XS$NULL等系统内置用户的密码,避免破坏数据库默认功能 - 修改后务必同步新密码
password456给所有相关开发测试人员
内容的提问来源于stack exchange,提问作者Majkl
相关产品推荐
相关产品推荐

