环境:
操作系统:windows 10
oracle:11g r2
问题:
通过sqlplus / as sysdba试图通过操作系统认证的方式登录到sysdba角色的sys用户报错,ora-01031:权限不足。
而通过输sys和密码的方式登录就正常
C:\Users\Administrator>set oracle_sid=orcl
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 18 14:26:05 2018
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
::然后如果是用账号密码的方式登录就正常
C:\Users\Administrator>sqlplus sys/oracle@orcl as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 18 15:01:43 2018
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
然后在网上找了不少资料,参考了不少大神的意见,发现如果要通过操作系统认证的方式登录sys用户,需满足以下两点:
1、登录的操作系统账户在本地用户组ora_dba中
2、sqlnet.ora文件的配置:SQLNET.AUTHENTICATION_SERVICES = (NTS)
先贴一个参考的链接:windows平台下的oracle ORA-01031的解决方法
1、当前登录的操作系统用户是否在用户组ora_dba中
(1)右键我的电脑进入“计算机管理”,查看用户和组的组里面的用户组ora_dba,看下当前登录的用户在不在这个组里面,不在的话添加进去。提供一个简单简单的添加方法:oracle安装路径下\product\11.2.0\dbhome_1\database\oradba.exe,找到这个文件,右键以管理员身份运行,就可以把当前用户添加在ora_dba组中。
(2)没有了。
2、oracle安装路径下\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora
(1)看下这个文件中有没有设置 SQLNET.AUTHENTICATION_SERVICES = (NTS) ,没有的话在后面加一条即可。
SQLNET.AUTHENTICATION_SERVICES = (NTS)
(2)真没了。
结果如下:因为机子上有多个数据库,默认的sid不是orcl,所以开始的时候手动设定一下oracle_sid=orcl
C:\Users\Administrator>set oracle_sid=orcl
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 18 15:35:36 2018
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1068937216 bytes
Fixed Size 2182592 bytes
Variable Size 738198080 bytes
Database Buffers 322961408 bytes
Redo Buffers 5595136 bytes
数据库装载完毕。
数据库已经打开。
SQL>
又可以开心的写bug了