ORA-01017本质是认证失败而非连接失败,需优先排查密码大小写敏感(SEC_CASE_SENSITIVE_LOGON=TRUE)、密码文件缺失/损坏(v$pwfile_users为空)、账户状态异常(锁定/过期/无CREATE SESSION权限)、PDB上下文错误、引号及BOM等传参干扰。
ORA-01017 几乎总是认证失败,不是连不上,而是连上了却验不过——优先查大小写敏感、密码文件、账户状态这三块,别一上来就重装客户端或改防火墙。
Oracle 11g 起默认开启密码大小写校验,设为 TRUE 后,Password=Abc123! 和 Password=abc123! 就是两个不同密码。
sqlplus "scott/TiGeR@123"@orcl,否则 shell 或 IDE 可能提前截断或转义SHOW PARAMETER sec_case_sensitive_logon; 查当前值;若返回 TRUE,说明服务端在严格字节比对sqlplus 不报错但 .NET 驱动会原样传给 Oracle 导致比对失败远程用 sys 或 system 加 as sysdba 登录报 ORA-01017,但普通用户正常?大概率是密码文件没建或损坏。
SELECT * FROM v$pwfile_users;,结果为空就说明没生效的密码文件orapwd 重建(路径需匹配你的 $ORACLE_HOME):orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=your_new_pwd entries=10
orapwprod1
Oracle.ManagedDataAccess 对引号和转义极其敏感,错一个符号就传错密码。
User Id="my_user";,否则 Oracle 当作 MY_USER
@、/、:、$?必须用英文双引号包裹:Password="Pass@123";
Password="password";;更稳妥用逐字字符串:@'User Id=scott; Password="TiGeR@123";'
appsettings.json 或环境变量读取?务必调用 .Trim(),尤其 Windows 配置常带 UTF-8 BOM 或空格ORA-01017 是“兜底错误”,账户锁定、过期、无 CREATE SESSION 权限,甚至连错 PDB,都可能统一返回这个码。
SELECT username, account_status FROM dba_users WHERE username = 'SCOTT';,EXPIRED & LOCKED 或 LOCKED 都会导致 ORA-01017SELECT * FROM dba_sys_privs WHERE grantee = 'SCOTT' AND privilege = 'CREATE SESSION';
tnsnames.ora 中的 SERVICE_NAME 必须指向正确的 PDB(如 PDBORCL),不能只写 CDB 名Open() 仍报 ORA-01017;临时加 Pooling=false; Connection Timeout=5; 可隔离问题真正难排查的点往往不在密码本身,而在密码怎么被传进去——引号、BOM、PDB 名、密码文件存在性、连接池缓存,这些环节任何一个出偏移,都会让“明明输对了”变成“服务端根本没收到对的字节”。