ITPub博客

首页 > 数据库 > Oracle > 通通透透分析Oracle的登陆认证方式(10g)

通通透透分析Oracle的登陆认证方式(10g)

原创 Oracle 作者:zcs0237 时间:2013-03-22 19:38:33 0 删除 编辑
[i=s] 本帖最后由 zcs0237 于 2013-3-22 19:38 编辑

a.欢迎对本帖补充、建议、更正
b.测试环境rhel5.4+Ora10.2.0.1.0

c.为节省篇幅,部分输出结果做了精简

第01部分 服务器端OS认证(默认启用)
01.1 以安装Oracle的用户登录OS
[size=9.5pt]不论输入什么用户,只要以
[size=9.5pt]sysdba[size=9.5pt]权限连接数据库,都可以连接上,并且连接用户是[size=9.5pt]sys[size=9.5pt]。
[size=9.5pt]有时候,如果忘记了数据库的密码,而又想登录数据库,可以通过这种方式,前提是在数据库服务器上。

SQL> connect / as sysdba

Connected.

SQL> connect sys/aaa  as sysdba

Connected.   

SQL> connect sys/bbb  as sysdba

Connected.

SQL> connect aaa/bbb  as sysdba

Connected.    //[size=9.5pt]哪怕这个用户如[size=9.5pt]aaa[size=9.5pt]在数据库中根本不存在

SQL> show user

USER is "SYS"

SQL> alter   user   sys   identified   by   install;

User altered.

SQL> connect sys/install@192.168.188.128:1521/orcl

ERROR:

ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

Warning: You are no longer connected to ORACLE.

SQL> connect sys/install@192.168.188.128:1521/orcl as sysdba

Connected.

SQL> show user

USER is "SYS"



01.2 以非安装oracle用户登录OS

# su – oracle

$ sqlplus / as sysdba

SQL> show parameter auth

NAME               TYPE        VALUE

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

os_authent_prefix  string      ops$

remote_os_authent  boolean     FALSE

SQL> create user ops$zcs1 identified by oracle;

User created.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

$exit

# useradd -g oinstall -G dba zcs1

# echo oracle|passwd --stdin zcs1

# su - zcs1

$ export ORACLE_SID=orcl

$ export ORACLE_BASE=/u01/app/oracle

$ export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

$ export PATH=$ORACLE_HOME/bin:$PATH

$ sqlplus / as sysdba

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

SQL>



01.3 屏蔽OS认证(以linux为例)

OS 认证有一定安全隐患,可以把相关系统用户删除,也可以修改sqlnet.ora文件。

在删除密码文件后,若想要以管理员身份连入数据库的话,则必须使用操作系统验证的方法进行登录。

$ cd $ORACLE_HOME/network/admin;ls sqlnet.ora

ls: sqlnet.ora: No such file or directory

$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora

$ sqlplus / as sysdba  //提示,需输入正常的用户名和密码

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

$cd $ORACLE_HOME/network/admin

$mv sqlnet.ora sqlnet.ora.bak     //重新启动用OS认证


********************************************************************************************

第02部分 密码文件认证

在Oracle中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle数据库可以有两种身份验证的方法:

1、使用与OS集成的身份验证

OS认证意思把登录数据库的用户和口令校验放在了OS一级。

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

2、使用Oracle数据库的password file进行身份验证

由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中,由此,向密码文件中增加或删除某一用户,实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限。

3、创建密码文件的命令

不管是在创建实例时自动创建的密码文件,还是使用手工创建的密码文件,都只包含INTERNAL/SYS用户的信息;

orapwd file=orapworcl password=oracle force=y

orapwd file=<密码文件的名字orapw>

password=< sys用户的密码>

entries=<密码文件用户数,二进制文件按矩阵计算可存多少数>

force=


02.1 创建密码文件
[size=9.5pt]在实际开发中,要把操作系统验证给取消掉,那以后就会采用密码验证了。但是假如我们把密码忘记了,又如何解决呢:重新生成密码文件即可。

一、使用orapwd建立,修改密码文件

$ cd $ORACLE_HOME/network/admin

$ mv sqlnet.ora.bak sqlnet.ora

$ strings sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES=(NONE)

$ sqlplus / as sysdba

ERROR:

ORA-01031: insufficient privileges

Enter user-name:

$ cd $ORACLE_HOME/dbs

$ ls orapw*

orapworcl

$ strings orapworcl|grep -i test

TEST

$ orapwd file=orapworcl password=redhat         //重建密码文件修改密码

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

$ orapwd file=orapworcl password=oracle force=y //改密码

$ strings orapworcl|grep -i test

$ sqlplus sys/oracle as sysdba

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

二、扩展密码文件的用户数量

当向密码文件添加的帐号数目超过创建密码文件时所定的限制时,为扩展密码文件的用户数限制,需重建密码文件。

$ orapwd file=orapworcl password=redhat entries=1

$ strings $ORACLE_HOME/dbs/orapworcl

]\[Z

ORACLE Remote Password file

INTERNAL

F7AC0C5E9C3C37AB

E100B964899CDDDF

//8i之前用internal用户来执行数据库的启动和关闭以及create database等操作,为保持用户习惯在8i中依旧保留了internal用户和svrmgrl,但已完全可以不使用svrmgrl工具和 internal用户了。

SQL> begin

  for i in 1..6 loop

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

  end loop;

  end;

  /

PL/SQL procedure successfully completed.

SQL> begin

  for i in 1..6 loop

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

  end loop;

  end;

  /

begin

*

ERROR at line 1:

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

ORA-06512: at line 3

SQL> host strings $ORACLE_HOME/dbs/orapworcl

]\[Z  //再次查看orapworcl发现多出了行,该二进制文件按矩阵计算可存放多少

ORACLE Remote Password file

INTERNAL

F7AC0C5E9C3C37AB

E100B964899CDDDF

3E81B724A296E296

668509DF9DD36B43

9CE6AF1E3F609FFC

7E19965085C9ED47

三、查看密码文件放了多少个sysoper/sysdba用户

可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限。这些用户也就是相应地存在于密码文件中的成员。

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP

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

SYS                            TRUE  TRUE

zcs                            FALSE TRUE

U1                             TRUE  FALSE

U2                             TRUE  FALSE

U3                             TRUE  FALSE



02.2 使用密码认证
一、创建密码文件

$ cd /u01/app/oracle/product/10.2.0/db_1/dbs

$ orapwd file=orapworcl password=redhat force=y

$ strings orapworcl

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

8A8F025737A9097A

二、开启密码文件认证

cd $ORACLE_HOME/network/admin;   //开启密码文件认证

echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora

三、通过授权sysdba,密码文件中增加scott的信息

REMOTE_LOGIN_PASSWORDFILE初始化参数文件中,此参数控制着密码文件的使用及其状态 (NONE:不使用密码文件,特权用户的登录通过OS进行身份验证) 。

[size=9.5pt]1[size=9.5pt]、[size=9.5pt]SHARED([size=9.5pt]密码文件可多实例使用[size=9.5pt],[size=9.5pt] [size=9.5pt]仅[size=9.5pt]INTERNAL[size=9.5pt]/[size=9.5pt]SYS[size=9.5pt]能特权登陆[size=9.5pt])
shared口令文件不能被编辑。即不能向shared口令文件增加用户。如果要增加用户或修改sysdba、sysoper用户的密码,需要设置REMOTE_LOGIN_PASSWORDFILE参数为exclusive然后再设置为shared。

SQL>alter system set remote_login_passwordfile=shared scope=spfile;

System altered.           //改为shared

SQL>startup force;

ORACLE instance started.  //为了使修改生效,重启数据库

SQL>alter user sys identified by system;

ERROR at line 1:          //修改sys用户的口令

ORA-28046: Password change for SYS disallowed

SQL>grant sysdba to scott;

ERROR at line 1:          //为scott用户授予sysdba权限

ORA-01999: password file cannot be updated in SHARED mode

[size=9.5pt]2[size=9.5pt]、[size=9.5pt]EXCLUSIVE([size=9.5pt]只有一个数据库实例可以使用此密码文件[size=9.5pt])

只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息。

SQL>alter system set remote_login_passwordfile=exclusive scope=spfile;

System altered.          //改为exclusive

SQL> show parameter remote_login_passwordfile

remote_login_passwordfile     EXCLUSIVE

SQL>startup force;

ORACLE instance started.  // 为了使参数生效,重启数据库

SQL>alter user sys identified by system;

User altered.             // 修改sys用户的密码

SQL>grant sysdba to scott;

Grant succeeded.          //为scott用户授予sysdba权限

SQL> host strings orapworcl

]\[Z

ORACLE Remote Password file

INTERNAL

AB27B53EDC5FEF41

8A8F025737A9097A

SCOTT

7AA1A84E31ED7771

四、禁用OS认证
$ cd $ORACLE_HOME/network/admin
$ ls sqlnet.ora
ls: sqlnet.ora: No such file or directory
$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora
$ sqlplus / as sysdba  //提示,需输入正常的用户名和密码
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
五、登陆后显示的账户信息是sys,而非scott

$ sqlplus scott/tiger as sysdba

SQL> show user

USER is "SYS"


******************************************************************************************************************************

第03部分  使用字典认证(非DBA)

只有在数据库run状态下普通用户连接上数据库时通过存储在字典表中的用户口令来进行鉴权认证。

一、创建用户并授授予SYSDBA权限

$ sqlplus / as sysdba

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

SQL> select INSTANCE_NAME,STATUS from v$instance;

INSTANCE_NAME    STATUS

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

orcl             OPEN

SQL> create user ZCS identified by ZCS;

User created.

SQL>select USERNAME,PASSWORD from dba_users where USERNAME='ZCS';

USERNAME                       PASSWORD

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

ZCS                            8C4FBF9DAA31F429

SQL> grant create session to zcs;

Grant succeeded.

二、禁用密码认证并删除密码文件

SQL> show parameter remote_login_passwordfile

remote_login_passwordfile     EXCLUSIVE(默认)

SQL>alter system set remote_login_passwordfile=NONE scope=spfile;

System altered.              //禁用密码认证

SQL>startup force;

ORACLE instance started.    //为了使修改生效,重启数据库

SQL>host

$cd $ORACLE_HOME/dbs/

$mv orapworcl orapworcl.bak

三、禁用OS认证(用户和密码完成正确才能登录)

客户端网络配置文件sqlnet.ora中的参数用来决定是采用OS层面的鉴权认证还是密码文件的鉴权认证。

$ cd $ORACLE_HOME/network/admin;ls sqlnet.ora

ls: sqlnet.ora: No such file or directory

$ echo 'SQLNET.AUTHENTICATION_SERVICES=(NONE)' > sqlnet.ora

四、使用数据字典认证登陆

$exit

exit

SQL> conn zcs/zcs

Connected.//默认可以使用OS认证



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

请登录后发表评论 登录
全部评论

注册时间:2013-01-25

  • 博文量
    42
  • 访问量
    495566