ORA-01031: insufficient privileges的解决方法

本文详细介绍了解决Oracle内部连接问题的步骤,包括检查sqlnet.ora文件、权限配置、操作系统相关设置等,旨在帮助用户排查并解决连接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文出自:http://www.chinaunix.net/jh/19/132866.html
############################################# 

# NAME: troubleshoot connect internal.txt 

# DESCRIPTION: 
# connect internal 
# connect / as sysdba 要口令问题: 
# refer (METALINK,ORACLEDOC), 
# metalink search words(connect internal) 
# NOTE: 

# modifiy (MM/DD/YY) AUTHOR 
# 05/03/03 ZORROL 
############################################# 
———————————————————— 
1
。检查sqlnet.ora 文件
sqlnet.ora 
文件损坏或格式不对可以导致出现该问题。 
sqlnet.ora 
文件可能存放路径为 
$TNS_ADMIN/sqlnet.ora 
如果没有设置$TNS_ADMIN默认在$ORACLE_HOME/network/admin/sqlnet.ora   
 
$HOME/sqlnet.ora       
(1).   
可以从别的机器拷贝一个文件过来,注意备份原来的sqlnet.ora 
---
检查sqlnet.ora 文件内容 
(2).   
检查SQLNET.AUTHENTICATION_SERVICES   
如果没有使用dblink.检查该行并设置 
SQLNET.AUTHENTICATION_SERVICES = (BEQ,NONE) 
(3).    SQLNET.CRYPTO_SEED   
unix 下不需要该参数。如果存在该行,注释掉或删掉 
(4).AUTOMATIC_IPC   
如果该参数为 ON,将强制使用"TWO_TASK" 连接 
最好设置为OFF 
AUTOMATIC_IPC = OFF 
2.
检查相关文件的权限配置。 
找到$TNS_ADMIN/* 
$ cd $TNS_ADMIN     
$ chmod 644 sqlnet.ora tnsnames.ora listener.ora     
$ ls -l sqlnet.ora tnsnames.ora listener.ora     
-rw-r--r--    1 oracle dba         1628 Jul 12 15:25 listener.ora    
-rw-r--r--    1 oracle dba          586 Jun   1 12:07 sqlnet.ora     
-rw-r--r--    1 oracle dba        82274 Jul 12 15:23 tnsnames.ora 
3.
检查操作系统相关设置。 
(1).   $ORACLE_HOME
环境变量是否设置正确 
% cd $ORACLE_HOME      
% pwd   
如果错误,请重新设置: 
sh or ksh:     ----------      
$ ORACLE_HOME=<path_to_ORACLE_HOME>      
$ export ORACLE_HOME       
Example:      
$ ORACLE_HOME=/u01/app/oracle/product/7.3.3      
$ export ORACLE_HOME        
csh:      ----     
% setenv ORACLE_HOME <path_to_ORACLE_HOME>        Example:      
% setenv ORACLE_HOME /u01/app/oracle/product/7.3.3    
另外$ORACLE_HOME路径应为实际路径,不应是目录连接(ln -s) 
(2)   $ORACLE_SID
是否设置正确; 
% echo $ORACLE_SID                            
(3).
确信没有设置$TWO_TASK 
检查 "TWO_TASK" 是否设置: 
sh, ksh or on HP/UX only csh:     
----------------------------------- 
env |grep -i two     
- or -     
echo $TWO_TASK      
csh:      
---- 
setenv |grep -i two        
如果有返回行比如
TWO_TASK=     
- or -   
TWO_TASK=PROD    
就需要取消着这些环境变量设置  
sh or ksh:    
----------     
unset TWO_TASK         
csh: 
----     
unsetenv TWO_TASK    
(4) 
检查oracle 文件的权限
% cd $ORACLE_HOME/bin      
% ls -l oracle 
权限应为:rwsr-s--x, or 6751. 
如果不是: 
% chmod 6751 oracle   
(5). 
检查当前所连接的操作系统用户是否是"osdba" 并且已经定义在: 
"$ORACLE_HOME/rdbms/lib/config.s"   
or 
"$ORACLE_HOME/rdbms/lib/config.c". 
通常应为dba 
% id      uid=1030(oracle) gid=1030(dba)     
可以如果"gid"  "dba"  "config.s" or "config.c" 
里面应该有:            /* 0x0008          15 */          .ascii   "dba\0"     
如果没有添加目前的操作系统用户到dba 组,或则手工编辑更改config.c并且:%relink oracle 
(6).
所需要的文件系统是否正确mount 
%mount 
(7) 
目前身份是否是"root" 并且操作系统环境变量 "USER", "USERNAME", and "LOGNAME" 没有设置成"root". 
root
用户是特例,除非当前组是dba ,否则不能connect internal. 
root用户当前组改为dba组: 
# newgrp dba 
-----
最好不要以root管理数据库
(8).
检查"/etc/group" : 
是否存在重复行 
% grep dba /etc/group        
dba::1010: 
dba::1100:   
如果有,删掉没有用的。 
(9).
确信停掉的instance没有占用内存资源 
比如:ipcs -b             
T          ID        KEY         MODE     OWNER       GROUP    SEGSZ         
Shared Memory:            
m           0    0x50000ffe --rw-r--r-- root        root          68            
m        1601    0x0eedcdb8 --rw-r----- oracle       dba     4530176         
可以看到1601 oracle 使用,删掉
-------
注意是否启动了多个instance 
% ipcrm -m 1601 
(10).
如果同时还有ora-12705 错误检查一下环境变量: 
"ORA_NLS", "ORA_NLS32", "ORA_NLS33" 
"NLS_LANG".      
(11).
检查 "ORACLE_HOME" and "LD_LIBRARY_PATH 环境变量: 
$ LD_LIBRARY_PATH=$ORACLE_HOME/lib      
$ export LD_LIBRARY_PATH       
$ ORACLE_HOME=/u01/app/oracle/product/8.0.4      
$ export ORACLE_HOME 
(12).
当前的instance 所再的磁盘是否有足够的磁盘空间 
df -k 
(13).
用户对/etc/passwd 是否有读权限。 
(14).
如果使用mts 方式,确信你的连接使用dedicade server 方式。 
(15).
安装ORACLE所需操作系统补丁是否打全。ORACLE 是否已经补丁到最新

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=218631

分类: oracle-LinuxOracle
### 解决ORA-01031: insufficient privileges错误的方案 ORA-01031错误通常表示用户尝试执行的操作需要更高的权限,但当前用户没有足够的权限。这种问题可能出现在多种场景中,例如启动数据库、修改用户密码或执行某些管理操作时。以下是一些常见原因及解决方案: #### 1. **检查用户权限** 需要确认当前用户是否具有执行该操作所需的权限。例如,在Oracle Restart环境中,如果使用`srvctl`命令启动数据库失败,可能是由于用户缺少必要的角色或权限[^1]。可以通过以下查询检查用户的权限: ```sql SELECT granted_role FROM dba_role_privs WHERE grantee = '<username>'; ``` 如果用户未被授予`DBA`角色或其他相关权限,则需要联系数据库管理员进行授权。 #### 2. **确保正确配置Job Role Separation** 在启用了Job Role Separation(职责分离)的环境中,不同用户负责不同的任务。如果`oracle`用户试图执行超出其职责范围的操作,可能会导致ORA-01031错误。可以检查环境变量和配置文件,确保正确的用户和角色分配[^1]。 #### 3. **验证Oracle Restart配置** 在Oracle Restart环境中,`srvctl`命令依赖于Grid Infrastructure来管理资源。如果配置不正确,可能导致权限不足的问题。可以检查以下内容: - 确保`oracle`用户属于`oinstall`和`dba`组。 - 验证`$ORACLE_HOME`和`$GRID_HOME`是否正确设置。 - 检查`/etc/oratab`文件中的条目是否正确。 #### 4. **解决PDB/CDB环境中的权限问题** 在多租户环境中(如CDB/PDB),ORA-01031错误可能与容器用户权限有关。例如,普通用户无法在PDB中执行某些管理操作[^3]。可以通过以下步骤解决问题: - 确认用户是否具有`SYSDBA`或`SYSOPER`权限。 - 如果用户需要修改其他用户的密码,必须确保其具有`ALTER USER`权限。 ```sql GRANT ALTER USER TO <username>; ``` #### 5. **检查操作系统权限** 某些情况下,ORA-01031错误可能与操作系统权限有关。例如,如果`oracle`用户无法访问某些关键文件或目录,也可能导致此错误。可以检查以下内容: - 确保`oracle`用户对`$ORACLE_HOME`及其子目录具有读写权限。 - 验证`orapwd`文件是否存在,并且具有正确的所有权和权限。 #### 6. **重置密码或重新配置用户** 如果问题是由于用户密码过期或配置错误引起的,可以尝试重置密码。例如: ```sql ALTER USER dbsnmp IDENTIFIED BY "new_password"; ``` 如果仍然出现ORA-01031错误,可能需要检查用户是否被锁定或禁用[^2]。 ### 示例代码 以下是一个示例脚本,用于检查和修复常见的权限问题: ```sql -- 检查用户权限 SELECT granted_role FROM dba_role_privs WHERE grantee = 'C##<secondary DV acct manager>'; -- 授予必要权限 GRANT DBA TO C##<secondary DV acct manager>; -- 修改用户密码 ALTER USER dbsnmp IDENTIFIED BY "new_password"; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值