ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库管理员权限认证&&密码文件的创建和管理

数据库管理员权限认证&&密码文件的创建和管理

原创 Linux操作系统 作者:to_be_dba 时间:2013-07-15 16:57:14 0 删除 编辑

数据库管理员权限认证&&密码文件的创建和管理

一、数据库管理员权限认证

oracle最常用的账户认证方式是数据字典认证方式,从11gR1开始,密码是大小写敏感的了。可以通过将sec_case_sensitive_logon参数设置为false来禁用该特性。
除数据字典方式认证外,还包括密码文件认证、操作系统权限认证以及基于网络的认证服务器,比如oracle internet directory。
这些方法代替了以前的内部认证方式“connect internal”。
操作系统认证发生在密码文件认证之前。如果符合操作系统认证要求了,就是使用密码文件,也还是会选择操作系统认证的方式。


认证方式的选择应该考虑到连接是否安全。
如果在远程进行数据库管理时,使用的是安全的连接协议,就可以使用操作系统认证方式。但对于比较流行的协议,如TCP/IP、DECnet,都是不安全的。

对于不安全的远程连接方式,必须使用密码文件认证方式。这时,数据库在密码文件中保留了已经授予sysdba或sysoper权限的数据库用户的用户名。

对于本地连接和安全的远程连接,用有权限的用户直接登录:
如果有密码文件,并且你已经被赋予sysdba或sysoper权限,可以通过密码文件连接和认证;
如果服务器未使用密码文件或者由于没有被授予sysdba、sysoper权限而不再密码文件中,可以使用操作系统认证方式。

在大多数系统中,dba权限认证包括将dba放到特定的组中,通常是OSDBA组。该组中的用户被授予了sysdba权限。类似地OSOPER组是给用户授予了sysoper的组。

1.使用操作系统认证方式

OSDBA和OSOPER组中的成员可以使dba通过操作系统认证,而不需要用户名和密码的方式。(操作系统认证方式)
这两个组是oracle安装时创建的,默认成员取决于操作系统。在unix系统中分别是组dba、oper,在windows中是ora_dba、ora_oper。

2.使用密码文件认证方式

1)在未创建的情况下,可以使用orapwd命令创建密码文件:
orapwd file= entries=

注意两点:
使用dbca创建数据库时,会自动创建密码文件
11gR1开始,密码大小写敏感,可以使用在以上命令中使用ignorecase=Y禁用

2)设置remote_login_passwordfile参数为execlusive(默认)

3)以sys或其他管理员权限用户连接数据库

4)如果不存在该用户,创建并指定密码


5)授权:grant sysdba to xxxx;


二、密码文件的创建和管理

1.用orapwd创建密码文件

ORAPWD FILE=filename [ENTRIES=numusers] [FORCE={Y|N}] [IGNORECASE={Y|N}]
其中file是文件的完整路径和名称
entries表示该文件中允许的最大用户数量
force=y表示强制重写已存在的密码文件
ignorecase确认是否大小写敏感

需要注意,在等号两侧不允许有空格。

密码文件名称:
unix/linux: ORACLE_HOME/dbs/orapwORACLE_SID
Windows : ORACLE_HOME\database\PWDORACLE_SID.ora

2.密码文件的共享号禁用

remote_login_passwordfile参数控制密码文件是否可以在多个实例间共享。该参数也可以用于禁用密码文件认证。
remote_login_passwordfile的可选值为:
NONE    oracle认为密码文件不存在,也就是说不安全的连接不能连接到数据库。

EXCLUSIVE 默认选项,只能用于一个实例。只有EXCLUSIVE文件可以被修改。使用该选项,可以增、删、该用户,可以用alter user命令修改sys密码。

SHARED  可以被相同服务器的多个数据库共用,或RAC的多个实例共用。不能被修改、增加用户。
     必须将所有需要sysdba或sysoper操作系统权限的用户都加到密码文件中,然后将remote_login_passwordfile由exclusive改为shared,并共享该文件。
     在管理多个数据库或者RAC时使用该选项。
     
如果remote_login_passwordfile参数设置为exclusive或shared,但密码文件丢失,则等价于设置为了NONE。


如果将该参数由none改为shared或exclusive,或者用不同的sys密码重建了该文件,就必须确保数据字典中的密码和sys用户的密码相同。
要同步sys密码,可以使用alter user语句修改sys密码。alter user语句会将数据字典和密码文件的密码都更新。

要同步拥有sysdba或sysoper的非sys用户的密码,需要收回并重新授予权限,如:
SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSDBA='TRUE'; (查看)
REVOKE SYSDBA FROM non-SYS-user;(收回)
GRANT SYSDBA TO non-SYS-user;(授予)

3.增加用户到密码文件

当给某个用户授予sysdba或sysoper权限时,用户名和权限信息被增加到密码文件中。
如果服务器没有exclusive的密码文件,授权时就会报错。

由于sysdba和sysoper是非常高的权限,其grant语句中不建议使用with admin option选项。
只有当前以sysdba登录的用户才能给其他用户授予或收回sysdba、sysoper权限。
该权限不能授予角色,因为角色是在数据库启动后才生效的。

在v$pwfile_users视图中可以看到sysdba、sysoper或sysasm权限的用户信息。

4.密码文件的维护

1)替换密码文件
查询v$pwfile_users找到sysdba、sysoper权限的用户
删除当前的密码文件
创建新的密码文件,确保entries参数足够大

2)删除密码文件
直接将密码文件物理删除即可。删除后,只有能被操作系统识别的sysdba、sysoper权限用户能进行相应操作。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

实练:

由于oracle在进行账户认证时是先采用操作系统认证方式的,无论用户名和密码是什么,都可以sysdba权限登录。
因此,需要先将操作系统认证方式禁用,再去测试密码方式才有意义。

禁用的方法比较简单,将sqlnet.ora中的
SQLNET.AUTHENTICATION_SERVICES= (NTS)
改为
SQLNET.AUTHENTICATION_SERVICES= (NONE)

修改前登录:
D:\Documents and Settings\tian>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 7月 15 16:53:13 2013

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

SQL> conn /as sysdba
已连接。


修改后登录:
SQL> conn /as sysdba
ERROR:
ORA-01031: insufficient privileges

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


我的环境中密码文件在:
D:\oracle10g\database\PWDtest.ora

将此文件改名。

然后登录并查看数据库:

SQL> conn sys/sys@test as sysdba
Connected to Oracle Database 10g Release 10.2.0.1.0
Connected as SYS

SQL> select * from v$pwfile_users;

USERNAME                       SYSDBA SYSOPER
------------------------------ ------ -------

可以看到,10g中只有sysdb和sysoper两个属性列。11g应该还有sysasm。
因为sys是系统能识别的sysdba权限用户,即使密码文件删了,依赖可以用它登录。
但如果是以前设置的远程操作系统用户,可能就不行了。

下面重建:

SQL> exit
从 Oracle Database 10g Release 10.2.0.1.0 - Production 断开

D:\Documents and Settings\tian>orapwd file=D:\oracle10g\database\PWDtest.ora pas
sword=tianlei ENTRIES=5 IGNORECASE=Y
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 overwrit
e existing file (opt),
OPERs (opt),
  There are no spaces around the equal-to (=) character.
--以上是由于10g环境没有ignorecase选项造成的

D:\Documents and Settings\tian>orapwd file=D:\oracle10g\database\PWDtest.ora pas
sword=tianlei ENTRIES=5

--登录后再次查询:
D:\Documents and Settings\tian>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 7月 15 16:12:34 2013

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

SQL> conn /as sysdba
已连接。
SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------ ----- -----
SYS                            TRUE  TRUE


SQL> grant sysdba to scott;

Grant succeeded

SQL> grant sysoper to  terry ;

Grant succeeded

SQL> select * from v$pwfile_users;

USERNAME                       SYSDBA SYSOPER
------------------------------ ------ -------
SYS                            TRUE   TRUE
SCOTT                          TRUE   FALSE
TERRY                          FALSE  TRUE


 

参见 oracle administrator‘s guide 第一章

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451536/viewspace-766312/,如需转载,请注明出处,否则将追究法律责任。

下一篇: mysql学习(二)
请登录后发表评论 登录
全部评论

注册时间:2011-11-23

  • 博文量
    148
  • 访问量
    396418