其实简单点就是检查一下你的机器有没有一个ora_dba用户组,而且你登陆os的用户是否在这个组里,有的话问题的原因就找到了,下面是转的高手的介绍

本文环境配置:Oracle10gR2,Windows XP

Oracle的用户信息一般来说是保存在数据字典里的,所以常规用户在Oracle数据库没有启动的时候是无法登陆的。但有两类用户例外,这就是具有sysdba或者sysoper权限的用户。Oracle sysdba或者sysoper用户的登陆有两种方式:一是通过OS认证,二是通过密码文件验证。

究竟使用哪一种验证方式以及能否成功登陆取决于三个方面的因素:

1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的设置

2. 参数文件中REMOTE_LOGIN_PASSWORDFILE的设置

3. 密码文件 PWD%sid%.ora

Oracle进行权限验证的大致顺序如下:

1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行os验证还是密码文件验证。

2. 如果是os验证,根据当前用户的用户组判断是否具有sysdba权限。如果os验证失败,则进行密码文件验证。

2. 如果是密码文件验证,REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。

1. OS  

要启用os验证,就必须在qlnet.ora中设置SQLNET.AUTHENTICATION_SERVICES=(NTS),然后在Windows中建立ora_dba用户组,把相关用户加入到这个组中(e.g., administrator),这样administrator就可以在不用提供用户名和密码(或者提供任意的用户名和密码)的情况下以sysdba身份本地登陆。因为操作系统已经代替Oracle进行了验证。

测试一:ora_dba用户本地登陆

  1. C:/>sqlplus / as sysdba
  2. Connected to:
  3. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  4. With the OLAP and Data Mining options
  5. SQL>
  6. C:/>sqlplus wrong_user/wrong_password as sysdba
  7. Connected to:
  8. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  9. With the OLAP and Data Mining options
  10. SQL>
  1. C:/>sqlplus / as sysdba
  2. Connected to:
  3. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  4. With the OLAP and Data Mining options
  5. SQL>
  6. C:/>sqlplus wrong_user/wrong_password as sysdba
  7. Connected to:
  8. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  9. With the OLAP and Data Mining options
  10. SQL>

测试二:非ora_dba用户本地登陆

  1. C:/>sqlplus / as sysdba
  2. ERROR:
  3. ORA-01031: insufficient privileges
  4. Enter user-name:
  5. C:/>sqlplus wrong_user/wrong_password sysdba
  6. ERROR:
  7. ORA-01017: invalid username/password; logon denied
  8. Enter user-name:
  9. C:/>sqlplus sys/change_on_install as sysdba
  10. Connected to:
  11. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  12. With the OLAP and Data Mining options
  13. SQL>
  1. C:/>sqlplus / as sysdba
  2. ERROR:
  3. ORA-01031: insufficient privileges
  4. Enter user-name:
  5. C:/>sqlplus wrong_user/wrong_password sysdba
  6. ERROR:
  7. ORA-01017: invalid username/password; logon denied
  8. Enter user-name:
  9. C:/>sqlplus sys/change_on_install as sysdba
  10. Connected to:
  11. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  12. With the OLAP and Data Mining options
  13. SQL>

2. 密码文件验证

密码文件包含了被授予sysdba和sysoper权限的用户的用户名和密码。这是一个加密文件,一般来说存放在%oracle_home%/database目录下,文件名为PWD%sid%.ora。

如果要使用密码文件验证,则把sqlnet.ora改为SQLNET.AUTHENTICATION_SERVICES=none,或者从sqlnet.ora中删除SQLNET.AUTHENTICATION_SERVICES。同上匿名登陆sqlplus会失败,给出用户名和密码就可以成功登陆。

  1. C:/>sqlplus / as sysdba
  2. ERROR:
  3. ORA-01031: insufficient privileges
  4. Enter user-name:
  5. C:/>sqlplus sys/change_on_install as sysdba
  6. Connected to an idle instance.
  7. idle>
  1. C:/>sqlplus / as sysdba
  2. ERROR:
  3. ORA-01031: insufficient privileges
  4. Enter user-name:
  5. C:/>sqlplus sys/change_on_install as sysdba
  6. Connected to an idle instance.
  7. idle>

测试一:删除密码文件。使用用户名和密码登陆,失败!

  1. C:/>sqlplus sys/change_on_install as sysdba
  2. ERROR:
  3. ORA-01031: insufficient privileges
  4. Enter user-name:
  1. C:/>sqlplus sys/change_on_install as sysdba
  2. ERROR:
  3. ORA-01031: insufficient privileges
  4. Enter user-name:

测试二:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE=none。使用用户名和密码登陆,失败!

  1. SQL> alter system set remote_login_passwordfile=none scope=spfile;
  2. System altered.
  3. C:/>sqlplus sys/change_on_install as sysdba
  4. ERROR:
  5. ORA-01017: invalid username/password; logon denied
  6. Enter user-name:
  1. SQL> alter system set remote_login_passwordfile=none scope=spfile;
  2. System altered.
  3. C:/>sqlplus sys/change_on_install as sysdba
  4. ERROR:
  5. ORA-01017: invalid username/password; logon denied
  6. Enter user-name:

测试三:恢复密码文件,设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或者SHARED。使用用户名和密码登陆,成功!

  1. SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
  2. System altered.
  3. C:/>sqlplus sys/change_on_install as sysdba
  4. Connected to an idle instance.
  5. SQL>
  1. SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
  2. System altered.
  3. C:/>sqlplus sys/change_on_install as sysdba
  4. Connected to an idle instance.
  5. SQL>

3. 密码文件

查看具有sysdba或者sysoper权限的用户:

  1. SQL> select * from v$pwfile_users;
  2. USERNAME                        SYSDB    SYSOP
  3. ------------------------------  -------  -------
  4. SYS                             TRUE     TRUE
  1. SQL> select * from v$pwfile_users;
  2. USERNAME                        SYSDB    SYSOP
  3. ------------------------------  -------  -------
  4. SYS                             TRUE     TRUE

每次使用grant sysdba/sysoper授予新用户特殊权限或是alter user命令修改拥有sysdba/sysoper权限的用户密码的时候,Oracle都会自动的同步密码文件,这样保证在数据库没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

  1. SQL> grant sysdba to logicgate;
  2. Grant succeeded.
  3. SQL> select * from v$pwfile_users;
  4. USERNAME                       SYSDB     SYSOP
  5. ------------------------------- -------- --------
  6. SYS                             TRUE     TRUE
  7. LOGICGATE                       TRUE     FALSE
  1. SQL> grant sysdba to logicgate;
  2. Grant succeeded.
  3. SQL> select * from v$pwfile_users;
  4. USERNAME                       SYSDB     SYSOP
  5. ------------------------------- -------- --------
  6. SYS                             TRUE     TRUE
  7. LOGICGATE                       TRUE     FALSE

使用orapwd命令可以重建密码文件。

  1. C:/>orapwd
  2. Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
  3. where
  4. file - name of password file (mandatory),
  5. password - password for SYS (mandatory),
  6. entries - maximum number of distinct DBA (optional),
  7. force - whether to overwrite existing file (optional)
  1. C:/>orapwd
  2. Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
  3. where
  4. file - name of password file (mandatory),
  5. password - password for SYS (mandatory),
  6. entries - maximum number of distinct DBA (optional),
  7. force - whether to overwrite existing file (optional)

其中文件名和密码是必需的。entries设置了密码文件可包含的dba用户的最大数目。force定义了是否覆盖当前文件。重建密码文件会清除系统内除了sys用户以外所有sysdba用户的密码。必须使用grant sysdba同步密码文件。

  1. C:/>orapwd file=%oracle_home%/database/PWDepcit.ora password=temp entries=20 force=y;
  2. C:/>sqlplus sys/temp as sysdba
  3. Connected to:
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  5. With the OLAP and Data Mining options
  6. SQL> select * from v$pwfile_users;
  7. USERNAME                        SYSDB    SYSOP
  8. ------------------------------- -------- --------
  9. SYS                             TRUE     TRUE
  1. C:/>orapwd file=%oracle_home%/database/PWDepcit.ora password=temp entries=20 force=y;
  2. C:/>sqlplus sys/temp as sysdba
  3. Connected to:
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  5. With the OLAP and Data Mining options
  6. SQL> select * from v$pwfile_users;
  7. USERNAME                        SYSDB    SYSOP
  8. ------------------------------- -------- --------
  9. SYS                             TRUE     TRUE

【转载】为什么任何随便输入的账号使用SYSDBA权限都能登陆oracle的更多相关文章

  1. 【转载】 C#检测输入的内容中是否含有中文

    在C#开发中,可以结合正则表达式,来检测输入的内容中是否包含中文,Regex类是C#中有关正则表达式处理的相关类,功能强大,我们只需要设置好规则,即可很快检测出输入的字符串内容中是否含有中文信息. R ...

  2. 【转载】MySql新建账号并分配权限

    在服务器的MySQL运维过程中,我们有时会遇到新建MySql账号的情况,要求新建的账号只允许某些特定的数据库操作权限,只能访问到特定的数据库,实现数据库权限的严格管理,以下以MySQL-Front管理 ...

  3. 转载——分享一个html+js+ashx+easyui+ado.net权限管理系统

    EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得 ...

  4. CentOS学习笔记--账号管理与权限配置

    Linux 的账号管理与权限配置 管理员的工作中,相当重要的一环就是『管理账号』啦! 使用者标识符: UID 与 GID 虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux ...

  5. mysql创建账号及管理权限

    mysql创建账号及管理权限 0.mysql版本8.0.15,服务器版本:RHEL 6.5 1.创建用户名密码 mysql> use mysql; mysql> create user ' ...

  6. CentOS7安装及配置vsftpd (FTP服务器FTP账号创建以及权限设置)

    本文章向大家介绍CentOS7安装及配置vsftpd (FTP服务器FTP账号创建以及权限设置),主要包括CentOS7安装及配置vsftpd (FTP服务器FTP账号创建以及权限设置)使用实例.应用 ...

  7. 解决升级WordPress及插件需输入FTP账号的问题

    当添加,删除,升级 WordPress 插件或者直接升级 WordPress 的时候,WordPress 总是提示让你输入 FTP 帐号信息,非些烦人. 我们可以在 wp-config.php 中定义 ...

  8. git托管代码随笔--运用ssh传输,不用每次提交频繁输入github账号密码

    遇到问题:在使用git bash的时候 每次git push均要输入账号密码. 问题原因:使用的是http传输,需用ssh传输. 解决方法: 1.设置密钥 ssh-keygen -t rsa -C & ...

  9. (转载):() { :|:& }; : # <-- 打开终端,输入这个,回车.你看到了什么??

    代码::() { :|:& }; : 为什么这个东西会让你的系统死掉???有人执行了然后问我 让我们来分析一下这段代码,我改一下格式,但内容是一样的 代码::() # 定义一个叫“:”的过程  ...

随机推荐

  1. oracle学习--循环语句

    oracle学习--循环语句  loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...

  2. Android 数据库框架总结(转)

    转自 http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完 ...

  3. 五 shutil模块

    高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 1 import shutil 2 3 shuti ...

  4. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  5. css设置input不显示光标

    把光标颜色设置为透明色和父类一样就看不出来了,就好像取消了 caret-color: transparent; 设置了这个属性后,无论如何点击都好像没有光标似的

  6. hadoop深入简出(二)

    1.上传文件 Hadoop fs -put hello.txt / 2.查看上传的文件 hadoop fs -ls / hadoop fs -text /hello.txt 两个命令都可以 3.创建文 ...

  7. 消除游戏源码 Match 3 Jewel Full 298 Levels

    Match 3 Jewel Full 298 Levels 一款unity3d编写的消消乐游戏, 关卡丰富,很好玩 下载地址:点击下载

  8. 微信小程序开发——前端如何区分小程序运行环境

    前言: 之前用vue做h5项目,对于接口请求,都是根据前端访问域名来判断运行环境,然后自动适配对应的服务器地址的.这样的好处就是在开发.测试及发布上线全程都不需要手动去改接口请求地址,只要提前配置好就 ...

  9. go语言中的反射reflect

    package main; import ( "fmt" "reflect" ) //反射refection //反射使用TypeOf和ValueOf函数从接口 ...

  10. BCH/BCHABC/BCHSV分叉后重放机制小结

    1. 不过,在谈重放保护之前,我们需要先了解一下重放攻击(又称重播攻击.回放攻击).实际上,重放攻击在互联网行业里就有过出现,也是计算机世界黑客最常用的攻击方式之一,它是指攻击者发送一个目的主机已接收 ...