AG阅读总结10.3——密码文件管理*

原创 2012年03月23日 21:39:10

一、密码文件

    作用:主要进行DBA权限的身份认证

    DBA用户:具有sysdbasysoper权限的用户被称为dba用户。默认情况下sysdba角色中存在sys用户,sysoper角色中存在system用户

   

二、Oracle的两种认证方式;

    1.使用与操作系统集成的身份验证

    2.使用Oracle数据库的密码文件进行身份认证

 

三、密码文件的位置

    Linux下的存放位置:$ORACLE_HOME/dbs/orapw$ORACLE_SID

                  即:ORACLE_HOME/dbs/orapw<sid>

    Windows下的存放位置:$ORACLE_HOME/database/PW%ORACLE_SID%.ora

 

    密码文件查找的顺序

    --->orapw<sid>--->orapw--->Failure

 

    两种认证方式:类型与SQL server中的windows认证和SQL server认证

    决定在两个参数中

    1.remote_login_passwordfile = none | exclusive |shared  位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中

       none : 不使用密码文件认证

       exclusive :要密码文件认证,自己独占使用(默认值)

       shared :要密码文件认证,不同实例dba用户可以共享密码文件

      

    2. $ORACLE_HOME/network/admin/sqlnet.ora 

       SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)

       none : 表示关闭操作系统认证,只能密码认证

       all : 用于linuxunix平台,关闭本机密码文件认证,采用操作系统认证,但远程<异机>可以使用密码文件认证

       nts : 用于windows平台

      

    不同的组合

      1           2

    none          none      sys用户无论是本机还是远程均不可用

  

    判断当前使用的是操作系统认证还是密码认证

   

四、演示:

    1.在sqlnet.ora 中追加SQLNET.AUTHENTICATION_SERVICES = none  */

    [oracle@robinson ~]$ sqlplus / as sysdba /*登陆失败*/

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:41:28 2010

 

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

 

    ERROR:

    ORA-01031: insufficient privileges

    Enter user-name:

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

    [oracle@robinson ~]$ sqlplus sys/redhat as sysdba /*使用密码文件认证,登陆成功*/

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:42:35 2010

 

    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>

    ============================================================================================================

   

    2.将SQLNET.AUTHENTICATION_SERVICES的值改为all

 

    [oracle@robinson admin]$ sqlplus / as sysdba /*采用本机认证可以登陆*/

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:46:55 2010

 

    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@robinson admin]$ sqlplus sys/redhat@orcl as sysdba          /*使用密码文件登陆认证失败*/

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 10:48:35 2010

 

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

 

    ERROR:

    ORA-12641: Authentication service failed to initialize

 

    Enter user-name:

 

    --注:此时可以使用远程登陆。 

 

    --使用#符号将新增的SQLNET.AUTHENTICATION_SERVICES行注释掉恢复到缺省值

 

    

五、密码文件的建立:orapwd  

    [oracle@robinson ~]$ orapwd

    Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>

 

      where

       file - name of password file (mand),  /*密码文件的名字orapw<sid>*/

       password - password for SYS (mand),   /*sys用户的密码*/

       entries - maximum number of distinct DBA and  /*可以有多少个sysdba,sysoper权限用户放到密码文件中去,去掉重复记录*/

                                                /*注意entries中存放的个数但不是实际个数,这个是二进制数据*/  

       force - whether to overwrite existing file (opt), /*10g新增的参数,默认值为n ,y表示允许覆盖*/

    OPERs (opt),

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

     

    --修改密码:

    [oracle@robinson ~]$ cd $ORACLE_HOME/dbs

    [oracle@robinson dbs]$ ll orapworcl

    -rw-r----- 1 oracle oinstall 1536 Apr  7 15:50 orapworcl

    [oracle@robinson dbs]$ orapwd file=orapworcl password=oracle force=y

    [oracle@robinson dbs]$ sqlplus sys/oracle@orcl as sysdba

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 11:34:09 2010

 

    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@robinson dbs]$ orapwd file=orapworcl password=redhat

 

    OPW-00005: File with same name exists - please delete or rename

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat force=y

    [oracle@robinson dbs]$ rm orapworcl  /*删除密码文件*/

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat /*重建密码文件*/

 

    --演示将entries 改为1,然后将多个用户设置为sysdbasysoper

    [oracle@robinson dbs]$ orapwd file=orapworcl password=redhat entries=1

    [oracle@robinson dbs]$ strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    F7AC0C5E9C3C37AB

    E100B964899CDDDF

 

    --创建PL/SQL 增加20个新用户

    SQL> begin

      2  for i in 1..20 loop

      3  execute immediate 'create user u'||i||' identified by u'||i||'';

      4  end loop;

      5  end;

      6  /

    --将新用户赋予sysdba角色

    PL/SQL procedure successfully completed.

 

    SQL> begin

      2  for i in 1..20 loop

      3  execute immediate 'grant sysdba to u'||i||'';

      4  end loop;

      5  end;

      6  /

    begin  /*得到和密码文件相关的错误提示*/

    *

    ERROR at line 1:

    ORA-01996: GRANT failed: password file '' is full

    ORA-06512: at line 3

 

    --再次查看orapworcl发现多出了行,即当设置为的时候多出了个用户。原因是该密码文件是二进制文件,按矩阵计算可存放多少

    [oracle@robinson dbs]$ strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    F7AC0C5E9C3C37AB

    E100B964899CDDDF

    3E81B724A296E296

    668509DF9DD36B43

    9CE6AF1E3F609FFC

    7E19965085C9ED47

 

 

    --注意不要轻易删掉密码文件,这样会将其他账户的信息也删除

 

    

六、导致密码文件内容修改的几种方式:

    1.使用orapwd建立,修改密码文件,不建议使用

    2.使用alter user sys identified by <>

    3.使用grant sysdba to <> grant sysoper to <> revoke sysdba |sysoper from <>

 

七、查看密码文件内容 */

 

    [oracle@robinson dbs]$ strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    F7AC0C5E9C3C37AB

    E100B964899CDDDF

 

    --sys密码不记得可以使用OS系统身份认证登陆到sqlplus,再使用alter user修改密码

    SQL> alter user sys identified by oracle;

 

    User altered

    --再次查看密码文件与上一次对比,已经发生变化

    SQL> ho strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    AB27B53EDC5FEF41

    8A8F025737A9097A

 

 

    --通过授予权限来修改密码,密码文件中多出了scott的信息

    SQL> grant sysdba to scott;

 

    Grant succeeded.

 

    SQL> ho strings orapworcl

    ]/[Z

    ORACLE Remote Password file

    INTERNAL

    AB27B53EDC5FEF41

    8A8F025737A9097A

    SCOTT

    F894844C34402B67

 

 

    --注意此处中登陆后,显示的账户信息还是sys,而不是scott,但此时的scott已经具备了sys权限

    [oracle@robinson dbs]$ sqlplus scott/tiger@orcl as sysdba

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 9 11:56:09 2010

 

    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> show user

    USER is "SYS"

 

    

八、sysdba sysoper的区别

    SQL> select * from system_privilege_map where name like '%SYS%';

 

     PRIVILEGE NAME                                       PROPERTY

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

           -ALTER SYSTEM                                      0

           -4 AUDIT SYSTEM                                       0

          -83 SYSDBA                                                  0

          -84 SYSOPER                                              0

         

    --下面的链接是两者不同的权限说明    

    http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/dba.htm#sthref137

    The manner in which you are authorized to use these privileges depends upon the method of authentication that you use.

 

    When you connect with SYSDBA or SYSOPER privileges, you connect with a default schema,

    not with the schema that is generally associated with your username.

    For SYSDBA this schema is SYS; for SYSOPER the schema is PUBLIC.

    --两者的schema不同

    SQL> show user

    USER is "SYS"

    SQL> conn / as sysoper

    Connected.

    SQL> show user

    USER is "PUBLIC"

 

    --查看密码文件视图,可以得到哪些用户为sysdba,哪些用户为sysoper

    SQL> select * from v$pwfile_users;

 

    USERNAME                       SYSDB      SYSOP

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

    SYS                                    TRUE        TRUE

    SCOTT                              TRUE         FALSE

    USER1                              FALSE       TRUE

    --下面演示了使用不同的角色来登陆

    SQL> conn scott/tiger@orcl as sysdba

    Connected.

    SQL> conn scott/tiger@orcl as sysoper              /*scottsysop列为false*/

    ERROR:

    ORA-01031: insufficient privileges

 

 

    Warning: You are no longer connected to ORACLE.

    SQL> conn user1/user1@orcl as sysdba

    ERROR:

    ORA-01031: insufficient privileges

 

    SQL> conn user1/user1 as sysoper

    Connected.


 

1.2  OS 认证相关的参数

       Oracle数据库通过如下3个参数来实现OS 认证:

(1)sqlnet.ora中的 SQLNET.AUTHENTICATION_SERVICES参数。

(2)PFILE(或SPFILE)文件中的参数REMOTE_LOGIN_PASSWORDFILE

(3)口令文件PWDsid.ora(windows)或者 orapwSID(linux,大小写敏感)。

 

1.2.2  REMOTE_LOGIN_PASSWORDFILE 参数

该参数可以有如下值:

       REMOTE_LOGIN_PASSWORDFILE ='NONE'|'EXCLUSIVE'|'SHARED'

 

       1NONE不使用密码文件登录、不允许远程用户用sys登录系统、可以在线修改sys的密码;

       2EXCLUSIVE:默认值。只允许一个数据库使用该密码文件、允许远程登录、允许非sys用户以sysdba身份管理数据库、可以在线修改sys的密码。在这种模式下,口令文件可以包含用于多个特许的Oracle账户的口令。这是推荐的操作模式,特别是在运行RMAN时。如果希望将RMAN与来自于远程客户端的数据库连接,则必须使用该参数设置。

      3SHARE可以多个数据库使用密码文件。实际上是这样的: Oracle数据库在启动时,首先查找的是orapw<sid>的口令文件,如果该文件不存在,则开始查找,orapw的口令文件如果口令文件命名为orapw,多个数据库就可以共享、允许远程登录、只能用sys进行sysdba管理、可以在线修改sys的密码。在此设置下只有INTERNAL/SYS帐号能被识别,即使文件中存有其它用户的信息,也不允许他们以SYSOPER/SYSDBA登录。

 

修改:

SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

 

需要注意的是:这个参数不是动态参数。需要在数据库加载到MOUNT状态下修改,另外改变以后需要重新启动数据库,参数的设置才能够生效。

 

 

1.3 禁用OS认证

OS 认证存在一定的安全隐患,我们可以屏蔽OS认证。

 

1.3.1 windows

       在win下只要把oracle_home/NETWORK/admin/sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (nts)nts改成none或者注释掉这句话(在前面加上#),就可以屏蔽os功能,要想以sys用户连上数据库必须输入正确的sys口令,或者可以把oracle的安装用户从组ora_dba中删除掉,当然也可以直接把ora_dba这个组也删除,都可以屏蔽os功能.

 

如:

SQL> connect /as sysdba

ERROR:

ORA-01031: 权限不足

SQL> connect sys/aaa as sysdba

ERROR:

ORA-01017: 用户名/口令无效; 登录被拒绝

SQL> connect aaa/bbb as sysdba

ERROR:

ORA-01031: 权限不足

SQL> connect sys/system as sysdba

已连接。

SQL>

 

1.3.2  LINUX/UNIX 

       在文件sqlnet.ora中增加SQLNET.AUTHENTICATION_SERVICES=(none)以及删除dba(groupdel dba)组或者把oracle用户从dba组中删除都可以屏蔽os认证。

 

注意:

       使用这种屏蔽方法, 系统管理员还是可以创建ora_dba or dba组以及修改sqlnet.ora文件。

 

 

口令文件

 

2.1 口令文件说明

       Oracle的口令文件的作用是存放所有以sysdba或者sysoper权限连接数据库的用户的口令,如果想以sysdba权限远程连接数据库,必须使用口令文件否则不能连上,由于sys用户在连接数据库时必须以sysdba or sysoper方式,也就是说sys用户要想连接数据库必须使用口令文件,因此我认为在数据库中存放sys用户的口令其实没有任何意义!使用口令文件的好处是即使数据库不处于open状态,依然可以通过口令文件验证来连接数据库。开始安装完oracle,没有给普通用户授予sysdba权限,口令文件中只存放了sys的口令,如果之后把sysdba权限授予了普通用户,那么此时会把普通用户的口令从数据库中读到口令文件中保存下来,当然这时必须要求数据库处于open状态。如:

SQL> grant sysdba to test;

授权成功。

SQL> connect test/aaa@orcl as sysdba

ERROR:

ORA-01017: 用户名/口令无效; 登录被拒绝

警告: 您不再连接到 ORACLE。

SQL> connect test/test@orcl as sysdba

已连接。

SQL> alter database close;

数据库已更改。

SQL> grant sysdba , sysoper to test;

grant sysdba , sysoper to test

*

第 1 行出现错误:

ORA-01109: 数据库未打开

 

2.2 查看具有sysdba 权限的用户

       可以通过查询v$pwfile_users视图来查看有几个用户被授予了sysdba或者sysoper权限, v$pwfile_users的信息就是源于口令文件.

 

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP

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

SYS TRUE TRUE

TEST TRUE FALSE

 

       到底可以有几个用户被授予sysdba或者sysoper权限,是由创建口令文件时指定的entries数决定的,准确的说还不完全是,最终还和os block的大小有关,如果entries指定了5,一个os block可以存放8个用户的口令,那么可以由8个用户被授予sysdba或者sysoper。

 

       注意:事实是口令多长,加密之后的长度几乎都是相同的,也就是说口令文件占用的大小和口令指定的长度几乎关系不大。

 

C:>orapwd file=databasepwd.ora password=system entries=5

OPW-00005: 存在相同名称的文件 - 请删除或重命名

C:>orapwd file=databasepwd.ora password=system entries=5   force=y

 

       创建口令文件需要注意的是=前后没有空格。在10g增加了一个新的参数force default值n,它的作用类似于创建表空间时的reuse功能,当同名文件存在时是否覆盖。

 

       是否使用口令文件,由remote_login_passwordfile参数控制。这个参数在上面有说明。

 

 

2.4  sys/system 密码丢失的处理方法

 

(1).查询视图V$PWFILE_USERS,select * from V$PWFILE_USERS;

  记录下拥有 SYSOPER/SYSDBA 系统权限的用户信息。

(2)关闭数据库 shutdown immediate

(3)将密码文件重命名

(4)用orapwd 命令重建创建密码文件

       orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=admin

 entries=5   force=y

(5)将第一步查出来的用户添加到密码文件

              grant sysdba , sysoper to user;


相关文章推荐

AG阅读总结8——控制文件管理 *

一、Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份         记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以...

AG阅读总结10.4.2——参数文件管理

参数文件(10g中的参数文件)     主要用来记录数据库的配置文件,在数据库启动时,Oracle读取参数文件,并根据参数文件中的参数设置来配置数据库。     如内存池的分配,允许打开的进程...

AG阅读总结10.1.1——表空间管理*

原文转自一沙弥的世界:http://blog.csdn.net/robinson_0612/article/details/5611738 一、概念     表空间:是一个或多个数据文件的逻辑集合...

AG阅读总结6——管理进程

1、专有和共享服务进程: 专有服务(dedicated server process): 一般有两种常见的情况下使用专有服务进程:1,、进行一个批处理作业的时候   2、用rman去备份,还原,恢...

AG阅读总结7——跟踪文件总结

一、Oracle跟踪文件     Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动、关闭和运行期间后台进程的活动情况,如表空间创建、回滚段创建、某些alter命令、日志切换...

AG阅读总结9.1——日志管理

一、Oracle中的几类日志文件:     Redo log files      -->联机重做日志     Archive log files   -->归档日志     Alert log fi...

AG阅读总结9.2——日志管理*

Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档。相应的日志被称为归档日志。   一、归档日志     是联机重做日志组文件的一个副本     包含...

AG阅读总结10.4.1——参数文件简介

1、参数文件简述:  在oracle数据库中,参数文件包含了所有的数据库配置信息,它非常重要。我认为如果 要把oracle管理好,必须要做到对参数及参数文件的了如指掌。但是,oracle数据库中数据...

【2017/4/14】oracle10g的密码文件管理

oracle10g的密码文件管理

Linux精讲——用户名文件和密码文件

用户名文件:/etc/passwd[root@centos01 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/b...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AG阅读总结10.3——密码文件管理*
举报原因:
原因补充:

(最多只允许输入30个字)