本地普通用户用口令文件登陆数据库 ORA-09925 ORA-01031

本文介绍如何使用OS上的普通用户而非oracle用户来启动Oracle数据库,包括设置环境变量、解决权限问题及使用口令文件启动的具体步骤。

情景:不用oracle用户登录,启动数据库,用OS上的普通用户hellowheat,用口令文件启动数据库

        [hellowheat@mycentos ~]$ export ORACLE_HOME=/u01/oracle/product/10.2.0/db_1/

        [hellowheat@mycentos ~]$ export ORACLE_SID=orcl

        [hellowheat@mycentos product]$ env |grep ORA

        ORACLE_SID=orcl

        ORACLE_HOME=/u01/oracle/product/10.2.0/db_1/

         之后要检查$ORACLE_HOME目录权限,不然hellowheat用户没权限进入

        [hellowheat@mycentos product]$ /u01/oracle/product/10.2.0/db_1/bin/sqlplus /nolog

        SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 14 15:50:21 2009

 

        Copyright (c) 1982, 2005, Oracle.  All rights reserved.

        SQL> conn / as sysdba

        ERROR:

        ORA-09925: Unable to create audit trail file

        Linux Error: 13: Permission denied

        Additional information: 9925

        ORA-01031: insufficient privileges

 

        首先看到ORA-01031: insufficient privileges问题的话是oracle中的权限问题,要用口令文件

        而ORA-09925: Unable to create audit trail file的话也是权限的问题,应该没有进入目录的权限,然后找到audit trail file下的目录,修改之。但是仍然出现这问题。最后查资料,看了说The message you describe usually indicates that the permissions of $ORACLE_HOME/bin/oracle are not correct.

 

      [root@mycentos db_1]# chmod 6755 bin/oracle

        最后使用口令文件登录,成功启动数据库 

      SQL> conn sys/oracle as sysdba

      Connected to an idle instance.

      SQL> startup

       ORACLE instance started.

       Total System Global Area  167772160 bytes

        Fixed Size                  1218316 bytes

       Variable Size              79694068 bytes

       Database Buffers           83886080 bytes

       Redo Buffers                2973696 bytes

       Database mounted.

       Database opened.

 

<think>好的,我现在需要解决用户创建后使用sqlplus登录时出现ORA-01017错误的问题。首先,用户提到他们使用sysdba创建了用户,但新用户登录时报错。ORA-01017通常表示无效的用户名或密码,但可能还有其他原因。 首先,我应该回顾之前提供的解决方案,确保没有遗漏步骤。在之前的回答中,主要讨论了操作系统认证、密码文件sqlnet.ora配置以及用户权限的问题。现在的问题可能涉及到新用户的权限或密码设置。 首先,检查用户是否正确创建。用户可能创建时没有正确设置密码,或者在创建时遗漏了必要的权限。例如,是否使用了正确的IDENTIFIED BY子句,或者是否有拼写错误。需要确认创建用户的SQL语句是否正确,比如: CREATE USER new_user IDENTIFIED BY password; 然后,用户需要至少CREATE SESSION权限才能登录。可能用户创建后没有授予该权限,导致无法连接。应该检查是否执行了GRANT CREATE SESSION TO new_user;。 另外,密码是否符合Oracle的复杂性要求。例如,如果密码包含特殊字符,可能需要用引号括起来,或者在登录时正确转义。例如,如果密码是pass@123,在sqlplus中可能需要写成"pass@123"。 另一个可能性是用户被锁定或过期。需要检查用户的账户状态,使用DBA_USERS视图查看ACCOUNT_STATUS是否为OPEN,而不是LOCKED或EXPIRED。 还有可能是数据库的大小写敏感设置。如果数据库使用区分大小写的口令,而用户在创建时或登录时没有正确匹配大小写,也会导致错误。 此外,sqlnet.ora中的设置可能影响了认证方式。如果SQLNET.AUTHENTICATION_SERVICES设置为NTS或NONE,可能会强制使用操作系统认证,而新用户可能没有相应的权限。需要确认该参数是否允许密码认证,比如设置为ALL。 如果用户使用TNS连接,还需要检查tnsnames.ora中的配置是否正确,确保服务名和实例名正确。网络问题,如监听器未启动或配置错误,也可能导致连接问题,但此时错误通常是ORA-12541,而不是ORA-01017,所以可能性较低。 需要逐步排查这些可能性,从用户创建和权限开始,然后检查密码设置,账户状态,以及配置文件参数。可能还需要检查审计日志或跟踪文件,获取更详细的错误信息。</think>#### 一、问题核心原因 新用户通过`sqlplus`登录时出现**ORA-01017: invalid username/password**错误,主要与以下原因相关: 1. **用户密码错误或未正确设置**:创建用户时密码格式错误(如包含特殊字符未转义)或登录时输入错误。 2. **未授予登录权限**:未赋予新用户`CREATE SESSION`权限[^3]。 3. **用户状态异常**:账户被锁定(`LOCKED`)或密码过期(`EXPIRED`)。 4. **密码大小写敏感性问题**:数据库参数`SEC_CASE_SENSITIVE_LOGON`启用时,密码未按正确大小写输入[^1]。 --- #### 二、分步解决方案 ##### 1. **验证用户创建与密码设置** 以`sysdba`登录后,检查用户是否创建成功并确认密码格式: ```sql -- 查看用户是否存在及状态 SELECT username, account_status FROM dba_users WHERE username = 'NEW_USER'; -- 重新创建用户(若需修正密码) CREATE USER new_user IDENTIFIED BY "Password123#"; -- 特殊密码需用双引号包裹 ``` **关键点**: - 若密码包含特殊字符(如`@`、`#`),必须用双引号包裹。 - 登录时需保持密码一致性:`sqlplus new_user/"Password123#"`。 --- ##### 2. **授予必要权限** 新用户需至少拥有`CREATE SESSION`权限才能登录: ```sql GRANT CREATE SESSION TO new_user; -- 可选:授予基础权限(如RESOURCE) GRANT RESOURCE TO new_user; ``` **注意**:未授权限会直接导致ORA-01017[^3]。 --- ##### 3. **检查用户账户状态** 若账户被锁定或过期,需手动解锁或重置密码: ```sql -- 解锁账户 ALTER USER new_user ACCOUNT UNLOCK; -- 重置密码 ALTER USER new_user IDENTIFIED BY new_password; ``` --- ##### 4. **处理密码大小写敏感问题** 检查数据库参数`SEC_CASE_SENSITIVE_LOGON`: ```sql SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON; -- 若值为TRUE,密码区分大小写 ``` **解决方法**: - 登录时严格匹配密码大小写,或修改密码为全小写。 - 若需禁用大小写敏感(不推荐): ```sql ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; ``` --- ##### 5. **检查sqlnet.ora配置** 确保`SQLNET.AUTHENTICATION_SERVICES`允许密码认证: ```ini # 文件路径:$ORACLE_HOME/network/admin/sqlnet.ora SQLNET.AUTHENTICATION_SERVICES = (ALL) -- 允许所有认证方式(含密码) ``` 若设置为`NTS`(仅Windows)或`NONE`,需修改为`ALL`后重启实例[^2]。 --- ##### 6. **验证网络连接与监听器** 若通过TNS别名连接,检查`tnsnames.ora`配置: ```ini ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ``` 确认监听器状态: ```bash lsnrctl status -- 检查监听是否正常启动 ``` --- #### 三、排查流程图 ```mermaid graph TD A[ORA-01017登录失败] --> B{用户是否存在且状态正常?} B -->|否| C[以SYSDBA创建/解锁用户] B -->|是| D{是否授予CREATE SESSION?} D -->|否| E[授权后重试] D -->|是| F{密码格式是否正确?} F -->|否| G[重设密码并转义特殊字符] F -->|是| H{监听器配置正常?} H -->|否| I[检查tnsnames.ora和监听状态] H -->|是| J[成功登录] ``` --- #### 四、相关问题 1. 如何批量重置多个用户的密码? 2. Oracle中如何配置密码复杂度策略? 3. 为什么`GRANT CREATE SESSION`后仍无法登录? : Windows平台需注意密码特殊字符转义。 [^2]: `sqlnet.ora`配置错误会强制使用操作系统认证。 [^3]: 未授权限是ORA-01017的常见原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值