快速修复步骤:1. 检查Kerberos principal是否正确配置,使用klist -k查看密钥表。2. 在sqlnet.ora中添加SQLNET.KERBEROS5_CC_NAME和AUTHENTICATION_SERVICES=(KERBEROS5)。3. 使用okinit用户名@REALM初始化票据。4. 运行sqlplus /@tnsname测试连接。5. 如果远程,重启监听并验证krb5.conf文件路径。重启数据库服务即可恢复。
Oracle社区修复案例
ORA-28291: Attempted to use an invalid principal name. 这个错误通常是因为Kerberos票据无效或principal名称错误。解决方案:在客户端执行okinit user@EXAMPLE.COM,确认票据有效。然后检查tnsnames.ora和sqlnet.ora配置,确保KERBEROS5_LOGIN_*参数正确。远程处理时,使用ssh无密码登录服务器执行命令,避免本地票据过期。
数据库博客教程
遇到ORA-28291时,先验证KRB5_CONFIG环境变量是否指向正确的krb5.conf文件。编辑sqlnet.ora添加:AUTHENTICATION_SERVICES= (BEQUEATH, TCPS, KERBEROS5) SQLNET.KERBEROS5_CC_NAME = FILE:/tmp/krb5cc_$(whoami) KERBEROS5_CONF = /etc/krb5.conf。然后okdinit -f user@REALM,测试连接sqlplus /@db。
技术论坛帖子
我的情况是principal缺失,重装krb5-libs和krb5-workstation后,生成keytab文件kadmin -q 'ktadd -k /etc/krb5.keytab oracle/oraclehost@REALM'。复制到数据库服务器,设置权限chown oracle:oinstall /etc/krb5.keytab chmod 600。然后在wallet中配置,远程重启lsnrctl stop; lsnrctl start。
支持文档摘录
对于ORA-28291,确认服务principal与tnsnames.ora中的服务名匹配。使用kinit -k -t keytab user来获取票据。sqlnet.log中查看详细错误,如果是clock skew,同步时间ntpdate pool.ntp.org。远程无忧,通过putty执行脚本批量修复多节点。
经验分享文章
轻松解决:1. oklist检查票据。2. 如果缺失,okinit。3. 修改sqlnet.ora:SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5) KERBEROS5_CC_NAME=FILE:/tmp/krb5cc_%u。4. 测试okinit后sqlplus username/''@tns。远程用ansible playbook一键部署配置。
问答平台回答
问题:远程服务器ORA-28291怎么修?答:scp sqlnet.ora到服务器,ssh执行okinit $(whoami)@REALM,然后kdestroy旧票据,重init。验证echo $KRB5CCNAME确保正确。数据库侧无需重启,连接即恢复。
FAQ
Q: ORA-28291是什么原因?
A: Kerberos principal无效或票据过期。
Q: 如何远程修复?
A: 用ssh登录,okinit后测试sqlplus。
Q: keytab文件怎么生成?
A: kadmin -q 'ktadd -k keytab oracle/host@REALM'。
Q: 修复后怎么验证?
A: klist查看票据,sqlplus /@tns连接成功。