特殊权限与Oracle登陆认证管理

在开始学Oracle的时候有件事一直让我感觉很奇怪,就是为什么在数据没有起来的时候只要登录到安装Oracle的操作系统中直接用sqlplus / as sysdba就能登陆到数据库中然后对数据库进行启动停止之类的操作。后来看到关于Oracle口令文件相关资料的时候才豁然开朗:数据库认证信息并不一定存在数据库中的,这点和SQL Server很是不一样。

在Oracle中有两类特殊的权限SYSDBA和SYSOPER,当DBA需要对数据库进行维护管理操作的时候必须具有这两类特殊权限之中的一种。在数据库没有打开的时候,使用数据库内建的账号是无法登陆数据库的,但是拥有SYSDBA或是SYSOPER权限的用户是可以登陆的。认证用户是否拥有两类特殊权限的方法有两种:OS认证和口令文件认证。

OS认证和口令文件认证方法

Oracle特殊权限认证方法

(来源:Oracle® Database Administrator’s Guide 10g Release 2)

Oracle数据库究竟使用OS认证还是口令文件认证来进行管理取决于下面三个因素:

SQLNET.ORA参数文件中的参数SQLNET.AUTHENTICATION_SERVICES设置

PFILE(SPFILE)参数文件中的参数REMOTE_LOGIN_PASSWORDFILE设置

口令文件orapw$SID(Linux) | PWD$SID.ora(Windows)

Oracle权限认证的基本顺序是这样的,先由SQLNET.AUTHENTICATION_SERVICES的设置值来决定是使用OS认证还是口令文件认证,如果使用口令文件认证的话就要看后面两个条件了:如果REMOTE_LOGIN_PASSWORDFILE参数设置为非NONE而且口令文件存在的话就能正常使用口令文件认证,否则将会失败。

SQLNET.AUTHENTICATION_SERVICES参数

在SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN目录中)文件中,需要修改时直接用文本编辑器打开修改就行了,对于不同的操作系统SQLNET.AUTHENTICATION_SERVICES的取值会有些不一样,通常我们会用到下面的一些设置值:

SQLNET.AUTHENTICATION_SERVICES = (ALL)

对Linux系统,支持OS认证和口令文件认证。

对Windows系统,实际实验是不支持此参数,验证失败。

SQLNET.AUTHENTICATION_SERVICES = (NTS)

此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。

SQLNET.AUTHENTICATION_SERVICES = (NONE)

此设置值在Windows和Linux是作用一样的,指定Oracle只使用口令文件认证。

不设置此参数或SQLNET.AUTHENTICATION_SERVICES =

对Linux系统,默认支持OS认证和口令文件认证。

对Windows系统,默认只支持口令文件认证,不支持OS认证。

OS认证实现

Oracle使用操作系统中的两个用户组来控制OS认证,在不同的操作系统中这两个用户组的名称是不一样的,一般来说他们是OSDBA 和 OSOPER,这两个用户组都是在Oracle安装的时候创建的。下面列出不同系统中这两个用户组的名字:Operating System GroupUNIX User GroupUNIX User Group

OSDBAdbaORA_DBA

OSOPERoperORA_OPER

OSDBA用户组的用户可以使用SYSDBA权限登陆数据库,OSOPER用户组的的用户可以使用SYSOPER权限来登陆数据库。使用sqlplus可以用下面方法登陆

CONNECT/ASSYSDBACONNECT/ASSYSOPER

拥有OS权限的用户登陆数据库时不再需要输入用户名和密码,因此使用下面的命令也是可以正常登陆的:

CONNECTANY_USER_NAME/ANY_PASSWORDASSYSDBACONNECTANY_USER_NAME/ANY_PASSWORDASSYSOPER

因此要创建一个新的OS认证帐号步骤是:

建立一个OS用户

将用户加入到OSDBA或是OSOPER用户组

用新增加的用户登陆系统,然后输入sqlplus / AS SYSDBA进行登陆

REMOTE_LOGIN_PASSWORDFILE参数

REMOTE_LOGIN_PASSWORDFILE系统参数的设置制定了数据库使用口令文件的方法,此参数可以设置的值有三个:

REMOTE_LOGIN_PASSWORDFILE = NONE

不使用口令文件

REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

使用口令文件,但只有一个数据库实例可用使用

REMOTE_LOGIN_PASSWORDFILE = SHARED

多个数据库实例共用一个口令文件,这种设置下是不能增加其他数据库用户作为特殊权限用户到口令文件中的。

REMOTE_LOGIN_PASSWORDFILE参数属于初始化参数,只能在init.ora/pfile中指定或是在数据库打开状态下使用下面语句修改,然后重新启动数据库。

ALTERSYSTEMSETREMOTE_LOGIN_PASSWORDFILE=EXCLUSIVESCOPE=SPFILE;

要检查当前REMOTE_LOGIN_PASSWORDFILE的设定值在登陆Oracle后输入下面的命令

SQL>showparameterremote/** 这是输出结果,看remote_login_passwordfile一行

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

remote_archive_enable                string      true

remote_dependencies_mode             string      TIMESTAMP

remote_listener                      string

remote_login_passwordfile            string      EXCLUSIVE

remote_os_authent                    boolean     FALSE

remote_os_roles                      boolean     FALSE

SQL>

*/

口令文件和口令文件认证

口令文件存放着被授予SYSDBA或SYSOPER权限的用户的用户名和密码。它是一个加密的文件,用户不能修改这个文件,

在Linux系统中口令文件一般保存在$ORACLE_HOME/dbs目录下,文件名为orapw$SID;在Windows系统中口令文件一般保存在$ORACLE_HOME/database目录下,文件名为PWD$SID.ora。

使用口令文件认证的基本步骤是:

使用orapwd工具生成口令文件

设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED

使用SYS登陆数据库,创建新的数据库用户

使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

1、使用orapwd工具生成口令文件

我们可以使用Oracle提供的工具orapwd来创建或者重新初始化一个口令文件:

[oracle@RHEL4 dbs]$ orapwd

Usage: orapwd file=password=entries=force=where

file - name of password file (mand),

password - password for SYS (mand),

entries - maximum number of distinct DBA and     force - whether to overwrite existing file (opt),

OPERs (opt),

There are no spaces around the equal-to (=) character.

[oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

[oracle@RHEL4 ~]$

注意:使用orapwd重新生成口令文件之后以保存的授予的其他用户的SYSDBA或是SYSOPER权限将会丢失,需要重新的GRANT。

设定的entries值是不能修改的,如果要修改entries的话需要重新生成口令文件,在生成口令文件之前可以先通过V$PWFILE_USERS视图查询出当前被授予SYSDBA/SYSOPER权限的用户,然后在重新生成口令文件以后重新对这些用户授予SYSDBA/SYSOPER权限

2、设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或是SHARED

ALTERSYSTEMSETREMOTE_LOGIN_PASSWORDFILE=EXCLUSIVESCOPE=SPFILE;

3、使用SYS登陆数据库,创建新的数据库用户

CREATEUSERtestIDENTIFIEDBYtest;

4、使用GRANT命令授予新创建的用户SYSDBA/SYSOPER权限

GRANTSYSDBATOtest.

每次在Oracle系统里面使用GRANT SYSDBA/SYSOPER授予新用户特殊权限或是ALTER USER命令修改拥有SYSDBA/SYSOPER权限的用户密码的时候,Oracle都会自动的修改口令文件,增加或是修改相应的项目,这样保证在数据没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

实验

上面长篇大论的说了那么多,下面我们来做实验验证一下。实验都是基于Linux系统来做的,做实验之前先使用下面的命令创建一个口令文件:

[oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

1、验证OS认证

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (ALL)或是不设置,REMOTE_LOGIN_PASSWORDFILE = NONE,然后进行下面的操作。

本地使用下面两种方式登陆,都能成功

[oracle@RHEL4 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:06:55 2008

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

[oracle@RHEL4 dbs]$ sqlplus aaa/bbb as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:16:25 2008

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

远程使用口令文件方式登陆,失败

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ERROR:

ORA-01017: invalid username/password; logon denied

Enter user-name:

2、两种认证都失效

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NONE),REMOTE_LOGIN_PASSWORDFILE = NONE,然后进行下面的操作。

本地使用下面两种方式登陆,都失败

[oracle@RHEL4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:05 2008

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

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

[oracle@RHEL4 ~]$ sqlplus sys/pwd as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:46 2008

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

ERROR:

ORA-01017: invalid username/password; logon denied

Enter user-name:

远程使用口令文件方式登陆,失败

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ERROR:

ORA-01017: invalid username/password; logon denied

Enter user-name:

3、验证口令文件认证

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (NONE)不设置,REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE或SHARED,然后进行下面的操作。

本地使用验证OS认证,失败

[oracle@RHEL4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:16:56 2008

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

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

本地验证口令文件认证,成功

[oracle@RHEL4 ~]$ sqlplus sys/pwd as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:26:48 2008

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

远程使用口令文件认证,成功

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:21:18 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SYS@192.168.0.201/orcl>

4、两种认证都成功

设置SQLNET.ORA中参数SQLNET.AUTHENTICATION_SERVICES = (ALL),REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE,然后进行下面的操作。

本地使用验证OS认证,成功

[oracle@RHEL4 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:30:33 2008

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

远程使用口令文件认证,成功

D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:27:11 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SYS@192.168.0.201/orcl>

5、将SYSDBA/SYSOPER权限授权给其它数据库帐户

先查看口令文件的修改时间

[oracle@RHEL4 dbs]$ ll orapworcl

-rw-r-----  1 oracle oinstall  2560 Jun  7 19:04 orapworcl

用SYS登陆数据库,创建新用户test,并赋予SYSDBA权限

[oracle@RHEL4 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 21:41:36 2008

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

SQL>createusertestidentifiedbytest;Usercreated.SQL>grantsysdbatotest;Grantsucceeded.

SQL>exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

再看口令文件,已经修改了

[oracle@RHEL4 dbs]$ ll orapworcl

-rw-r-----  1 oracle oinstall  2560 Jun  7 21:42 orapworcl

再用新的test帐号登陆,能成功的登陆

D:\Oracle\SQLPlus10.2>sqlplus test/test@192.168.0.201/orcl as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 21:32:37 2008

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SYS@192.168.0.201/orcl>

说明:如果要取消SYSDBA权限只需要运行下面的语句就可以了

SQL>revokesysdbafromtest;

常见问题说明

1、如何查找拥有SYSDBA或是SYSOPER权限的用户

使用视图V$PWFILE_USERS,结果集中的SYSDB和SYSOP分别代表是否有SYSDBA和SYSOPER权限。

SQL>select*fromv$pwfile_users;/**

USERNAME                       SYSDB SYSOP

------------------------------ ----- -----

SYS                            TRUE  TRUE

TEST                           TRUE  FALSE

*/

2、授予权限时出现”ORA-01994: GRANT failed: password file missing or disabled”

出现这种情况是因为没有创建口令文件,或者是口令文件放置的目录不正确,Oracle找不到。只要重建或将口令文件置于$ORACLE_HOME/dbs/目录中就可以了。

3、忘记了SYS帐号的密码怎么办?

如果数据库启用的OS认证登陆,则可以用OS认证登陆数据库,然后使用下面的命令进行修改

alteruserSYSidentifiedbypwd;

如果没有启用OS认证登陆,则需要用orapwd重建口令文件

orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

来至:

oracle密码文件认证,Oracle OS认证与口令文件认证详解相关推荐

  1. 思科ccna认证工程师必看路由协议IGRP和EIGRP详解

    思科ccna认证工程师必看路由协议IGRP和EIGRP详解单单从他们的名字当中,我们就能猜到他们之间有很多的关联. IGRP: 一种内部网关路由协议,它由Cisco公司八十年代中期设计.使用组合用户配 ...

  2. 【Python入门】Python之OS模块39个常用函数详解

    os,语义操作系统,所以该模块就是操作系统相关的功能了,用于处理文件和目录这些我们日常手动需要做的操作,比如新建文件夹.获取文件列表.删除某个文件.获取文件大小.重命名文件.获取文件修改时间等,该模块 ...

  3. oracle如何启动和停止服务,CentOS启动和停止服务详解

    CentOS启动和停止服务详解 服务简介 Linux 系统服务是在Linux启 动时自动加载, 服务的添加.删除.自动运行及状态 CAMS 在安装过程中会自动添加相关的服务,例如: service c ...

  4. Oracle Database 12c RMAN全量+增量备份+归档日志恢复详解

    Oracle可以非常方便的把数据库恢复到具体某个时间的状态,而且还支持全备和多级增备,备份无需停止应用服务.比起DB2需要手动逐级恢复增量备份和归档日志,RMAN是非常简单好用的数据库商业解决方案. ...

  5. oracle大对象实例_Oracle解析复杂json的方法实例详解

    问题背景: 当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析.如此 ...

  6. oracle看一条sql的trace,SQL_TRACE和10046事件详解

    sql_trace和10046事件都是我们在优化sql上面应用的非常多的工具,我们可以使用这两个工具知道当前正在执行的sql究竟在做什么 一,SQL_TRACE: SQL_TRACE命令会将执行的整个 ...

  7. python os.path.exists 已存在_详解python os.path.exists判断文件或文件夹是否存在

    1.SocketServer模块编写的TCP服务器端代码 Socketserver原理图服务端:import SocketServer #导入SocketServer,多线程并发由此类实现 class ...

  8. 阿里云ACP认证考试过关心得经验及考试费用详解

    简介: 阿里云ACP专业认证考试值得考吗?当然值得!云吞铺子来说说ACP认证考试过关心得.经验分享.考试费用.报名考场等相关问题: ACP认证种类范围 ACP认证可以分为五个领域,即云计算.大数据.云 ...

  9. oracle表稅片整理,oracle_Oracle表碎片整理操作步骤详解,高水位线(HWL)下的许多数据 - phpStudy...

    Oracle表碎片整理操作步骤详解 高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink s ...

  10. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

最新文章

  1. 大数据的发展,伴随的将是软件工程师的渐退,算法工程师的崛起
  2. (笔试题)程序运行时间
  3. 计算机控制读书报告心得,计算机控制系统读书报告
  4. 安卓手机如何打开php文件夹,Android_Android中调用系统的文件浏览器及自制简单的文件浏览器,调用系统自带的文件浏览器- phpStudy...
  5. 【MFC】固定按钮工具栏
  6. php中mysql_connect与mysql_pconnect的区别
  7. Windows手工使用CMD命令写入系统服务方法
  8. xp系统能支持mysql_windowsxp下的mysql集群技术
  9. python编程(multiprocessing库)
  10. 计算机世界:免费的代价
  11. 激活golang编辑器
  12. win7/win10 密码忘了?没关系,利用5次shift,9步轻松破解密码
  13. Android 实现一键加QQ群,一键加QQ好友
  14. 用于检验手机号的位数以及检验此手机中是否为中国移动的手机号
  15. HIT计算机系统CSAPP-ICS2022大作业程序人生
  16. Windows11 ISO原版系统镜像
  17. JS控制台控制视频倍速
  18. Linux设备模型剖析系列一(基本概念、kobject、kset、kobj_type)
  19. 优动漫PAINT漫画和插画方面软件特色
  20. 计组-堆栈寻址-堆栈指针

热门文章

  1. python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题
  2. navicat快捷键
  3. Clion 2020.2 使用 C++20 等C++标准 编程
  4. 机器人学一些概念1——自由度冗余,映射和操作算子
  5. stm32搭建mqtt_STM32+ESP8266+AIR202基本控制篇-102-服务器基本搭建-安装MQTT软件(.Windows系统)...
  6. db2与oracle的区别 锁,db2和oracle语句区别
  7. d06调试详细说明_D06电脑板调试软件使用说明_20100706
  8. python生成的词云没有图案_Python生成词云的实现代码
  9. linux安装教程 ce,docker CE安装教程
  10. 添加vlan后无法上网_KTV多SSID绑定VLAN实用案例,值得一看的干货