Oracle数据库任何用户密码都能以sysdba角色登入
* 本文相关环境:Windows 10,64位操作系统;Oracle 11gR2;toad for Oracle12.1
最近在学习Oracle数据库,使用Toad for Oracle来查看数据库的信息,发现在以sysdba角色登录数据库时,无论输入什么密码,均可以连接到数据库,以为是数据库又出故障了,带着疑问,查找资料。发现里面有很多的学问,下面简单记述一下。
Oracle认证用户有两种方式:操作系统认证与口令认证。操作系统认证也叫本地认证。
- 操作系统认证:Oracle认为操作系统用户是可靠的,那么既然你能登录到操作系统,必然也能登录到数据库;
- 口令文件认证:Oracle认为操作系统用户是不可靠的,如果要访问数据库,必须再次使用密码认证。
(一)操作系统认证
要使用操作系统认证,需要设置两处:
(1)在sqlnet.ora文件中设置:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
如下图(第8行):

NTS特指的是windows系统。
(2)在windows中建立ora_dba组,然后把需要使用操作系统认证的用户加到这个组中,组的打开方式为:
控制面板->管理工具->计算机管理->本地用户和组->组。打开后我们可以看到相关信息:

点开Ora_dba用户组,可以看到:

这就可以解释为什么我们在使用Toad for Oracle或sqlplus等客户端工具登录数据库时,密码错误仍然可以登入:我们在安装数据库时,采用了默认的安装方式,使用操作系统认证登录到数据库,所以在使用sysdba方式认证登录时,无论密码对错,均可以登录到数据库。这里要注意的一点是,在使用了操作系统用户组ora_dba里面的用户登录才会采用操作系统用户登录,如果用户不在ora_dba里面,则无法使用操作系统用户登录。
登陆后,可以在 SQL Plus中执行下面语句 select user from dual来查看当前用户:

发现数据库的用户为SYS而不是SCOTT。经过多次测试,发现从CMD以sqlplus / as sysdba登录也是相同的结果。最后发现,无论使用哪个账户,只要以as
sysdba登录到数据库,最终数据库的user均为SYS。
(二)口令文件认证
Oracle的密码文件包含了被授予SYSDBA和SYSOPER权限的用户的用户名和密码,如果要使用用户名和密码登录,则把sqlnet.ora文件的AUTHENTICATION_SERVICES=none,或者将这句删除或屏蔽(前面加“#”号)。使用操作系统登录数据库的方式就会失去作用,只有给出正确的用户名和密码才能登录。
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 18 23:01:31 2016 Copyright (c) 1982, 2010, Oracle. All rights reserved. 请输入用户名: scott as sysdba /*以管理员方式登录*/
输入口令: /*输入错误的口令*/
ERROR:
ORA-01031: insufficient privileges 请输入用户名: scott as sysdba /*以管理员方式登录*/
输入口令: /*输入正确的口令*/
ERROR:
ORA-01031: insufficient privileges 请输入用户名: scott /*以normal方式登录*/
输入口令: /*输入正确的口令*/ 连接到:
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>
原文链接:http://www.cnblogs.com/lijiaman/p/6195523.html
【附:一文一图】
Oracle数据库任何用户密码都能以sysdba角色登入的更多相关文章
- [Oracle]Oracle数据库任何用户密码都能以sysdba角色登入
* 本文相关环境:Windows 10,64位操作系统:Oracle 11gR2:toad for Oracle12.1 最近在学习Oracle数据库,使用Toad for Oracle来查看数据库的 ...
- 任何用户密码都能以sysdba角色登入
这是因为在安装Oracle的时候默认是使用了操作系统验证: 数据库用sysdba登录的验证有两种方式,一种是通过os认证,一种是通过密码文件验证:登录方式有两种,一种是在数据库主机直接登录(用os认证 ...
- ORACLE数据库找回用户密码
安装完oracle数据库后,登录时sys,system,scott这几个用户密码输入后都不对,查阅资料后解决 1,cmd下输入sqlplus,之后让你输入用户名,输入这个 "/as sysd ...
- oracle 数据库创建用户并授权
oracle 数据库创建用户并授权 备注: userName 为用户名,123456 为密码 drop user userName cascade; create user userName iden ...
- 忘记oracle的sys用户密码怎么修改
转分类: Linux 一.忘记除SYS.SYSTEM用户之外的用户的登录密码. 用SYS (或SYSTEM)用户登录: CONN SYS/PASS_WORD AS SYSDBA; 使用如下语句修改 ...
- Oracle 数据库基本操作——用户管理与文件管理
目录: 1.初始状态 2.登录数据库 3.创建表空间 1)概念 2) 基本表空间 3)表空间管理 4.创建新用户 5.删除用户 6.用户的授权 1)定义 2)授予权限的方法 3)权限分类 4)授权注意 ...
- 忘记oracle的sys用户密码怎么修改以及Oracle 11g 默认用户名和密码
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- oracle数据库之用户管理
转载 Oracle创建用户.角色.授权.建表 一.oracle数据库的权限系统分为系统权限与对象权限: 系统权限( database system privilege )可以让用户执行特定的命令集 ...
- 忘记oracle的sys用户密码如何修改以及Oracle 11g 默认用户名和密码
忘记除SYS.SYSTEM用户之外的用户的登录密码 CONN SYS/PASS_WORD AS SYSDBA; --用SYS (或SYSTEM)用户登录 ALTER USER user_name ID ...
随机推荐
- ASP NET Core ---Automapper
官方文档:http://docs.automapper.org/en/stable/index.html 一.安装和配置: 二.使用: 1.建立 Profile文件: public class Map ...
- 用Python实现基于Hadoop Stream的mapreduce任务
用Python实现基于Hadoop Stream的mapreduce任务 因为Hadoop Stream的存在,使得任何支持读写标准数据流的编程语言实现map和reduce操作成为了可能. 为了方便测 ...
- react生命周期方法
Mounting阶段,当一个组件的实例被创建并插入到DOM中时,下面这些函数会被调用: constructor() componentWillMount:组件即将被渲染到页面上,render之前最后一 ...
- 【bzoj1070】[SCOI2007]修车 最小费用流
原文地址:http://www.cnblogs.com/GXZlegend/p/6798411.html 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的 ...
- JNDI连接数据库的详细步骤 以及简要的c3po数据库连接的配置
第一步在tomcat的context.xml文件中配置数据源:context.xml的路径形式是:D:\Program Files (x86)\apache-tomcat-6.0.44\conf\co ...
- MAC使用IDA PRO远程调试LINUX程序
1 背景 在学习Linux系统上的一些漏洞知识的时候,往往需要进行“实地测试”,但是在Linux系统上进行调试并不太方便,因为LINUX自带的GDB调试工具真的不太人性化,即使有GDBTUI之类的“伪 ...
- VMware Storage VMotion概述及功能
可以跨存储阵列实时迁移虚拟机磁盘文件.VMware Storage VMotion 使您可以在共享存储位置之间和跨共享存储位置重新分配虚拟机磁盘文件,同时保证连续的服务供应和事务处理的完整性. 1.可 ...
- classpath: spring 中的查找方式
Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件.classpath*:的出现是为了从多个jar文件中加载相同的文 ...
- C++/C---字符串
其他类型转字符串 itoa 功 能:把一整数转换为字符串用 法:char *itoa(int value, char *string, int radix);详细解释:itoa是英文integer t ...
- 【CF1016F】Road Projects(贪心)
题意:给你一棵n 个节点的树,定义1到n的代价是1到 n节点间的最短路径的长度. 现在给你 m 组询问,让你添加一条边权为 w 的边(不与原图重复),求代价的最大值.询问之间相互独立. 1≤n,m≤3 ...