Oracle 10g/11g 密码策略 用户口令 大小写敏感 说明

 

一. Oracle 10g

1.1 说明

在Oracle 10g下,默认情况下,密码是不区分大小写的。这个是由于密码文件的默认参数有关。

 

C:\Users\Administrator.DavidDai>orapwd

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

 

 where

   file - name of password file (required),

   password - password for SYS will be prompted if not specified at commandline,

   entries - maximum number of distinct DBA (optional),

   force - whether to overwrite existing file (optional),

   ignorecase - passwords are case-insensitive (optional),

   nosysdba - whether to shut out the SYSDBA logon (optional Database Vaultonly).

 

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

 

这个是口令文件创建命令的参数说明, 这里我们看一个参数:

ignorecase - passwords are case-insensitive (optional),

 

注意:

       这个参数用来指定大小写是否敏感,而默认情况是insentive, 即不敏感,所以对于Oracle10g的数据库,默认情况下,密码是不区分大小写的。但是在Oracle 10g中,我们无法使用这个参数,在后续的测试用有说明。

      

       虽然口令文件里只保存具有SYSDBA和OPER权限的用户,但是其他用户也会受影响。

 

1.2 示例

这里我们在Oracle 10g上做一个测试,为了避免OS认证的影响,我们这里可以禁用OS认证。

 

Oracle OS认证 口令文件 密码丢失处理

http://blog.csdn.net/tianlesoftware/article/details/4698293

 

SQL> select * from v$version;

 

BANNER

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

Oracle Database 10g Enterprise EditionRelease 10.2.0.5.0 - 64bi

PL/SQL Release 10.2.0.5.0 - Production

CORE   10.2.0.5.0     Production

TNS for Linux: Version 10.2.0.5.0 -Production

NLSRTL Version 10.2.0.5.0 - Production

 

--创建2个测试用户:

SQL> create user dave1 identified byDavE;

User created.

 

SQL> create user dave2 identified byDavE;

User created.

 

SQL> grant connect,resource to dave1;

Grant succeeded.

 

SQL> grant connect,resource to dave2;

Grant succeeded.

 

SQL> grant sysdba,sysoper to dave1;

Grant succeeded.

 

SQL> select * from v$pwfile_users;

USERNAME                SYSDB SYSOP

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

SYS                            TRUE  TRUE

DAVE1                      TRUE TRUE

 

SQL> conn dave1/dave;

Connected.

SQL> conn dave2/dave;

Connected.

 

SQL> conn dave1/dAVe;          

Connected.

 

SQL> conn dave1/dave1;

ERROR:

ORA-01017: invalid username/password; logondenied

 

 

Warning: You are no longer connected toORACLE.

 

从这里可以看出,在Oracle 10g下,密码是不分大小写。

 

--这里我们可以继续测试:

我们将sysdba 权限从dave1用户revoke,然后测试:

 

SQL> conn / as sysdba;

Connected.

SQL> revoke sysdba,sysoper from dave1;

Revoke succeeded.

 

SQL> select * from v$pwfile_users;

 

USERNAME                    SYSDB SYSOP

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

SYS                            TRUE TRUE

 

 

我们继续使用dave1进行测试:

 

SQL> conn dave1/dave;

Connected.

SQL> conn dave1/dave1;

ERROR:

ORA-01017: invalid username/password; logondenied

 

 

Warning: You are no longer connected toORACLE.

 

从这里我们可以看出,只是简单的revoke 并不能解决问题,我们重建一个口令文件,然后测试一下看看:

rac2:/u02/app/oracle/product/10.2.0/db_1/dbs>orapwd file=orapwanqing password=oracle force=y;

 

SQL> conn dave1/dave;

Connected.

--还是可以继续使用,不分大小写

 

DB 重启一下看看:

SQL> shutdown immediate

ORA-01031: insufficient privileges

SQL> conn / as sysdba;

Connected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  583008256 bytes

Fixed Size               2097984 bytes

Variable Size                159386816 bytes

Database Buffers         415236096 bytes

Redo Buffers                 6287360 bytes

Database mounted.

Database opened.

SQL> conn dave1/dave;

Connected.

 

所以我们重建口令文件不能解决问题。所以在Oracle 10g中,密码是不区分大小写的,这种现状,在Oracle 11g里才得到真正的改善。

 

我们可以在Oracle 10g中验证一下:

 

rac2:/u02/app/oracle/product/10.2.0/db_1/dbs>orapwd file=orapwanqing password=oracle force=y ignorecase=y

Usage: orapwdfile=<fname> entries=<users> force=<y/n>ignorecase=<y/n> nosysdba=<y/n>

 

  where

    file - name of password file (required),

    password - password for SYS will beprompted if not specified at command line,

    entries - maximum number of distinct DBA(optional),

    force - whether to overwrite existing file(optional),

    ignorecase - passwords are case-insensitive(optional),

    nosysdba - whether to shut out the SYSDBAlogon (optional Database Vault only).

   

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

 

       这里我们设置了ingroecase参数之后,orapwd命令无法正常运行。

 

因此,可以看出,ignorecase是oracle 11g中真正新增的功能,其在Oracle 11g中才可以使用。该参数用于设置sysdba或sysoper权限通过密码文件登陆时是否区分大小写。

 

 

二.Oracle 11g

2.1 说明

2.1.1 sec­_case_sensitive_logon 参数

在Oracle 11g中,Oracle开始区分密码大小写,这个由参数:SEC_CASE_SENSITIVE_LOGON决定,官网对这个参数的说明:

http://docs.oracle.com/cd/E11882_01/server.112/e25513/initparams221.htm

 

Property

Description

Parameter type

Boolean

Default value

true

Modifiable

ALTER SYSTEM

Range of values

true | false

Basic

No

 

SEC_CASE_SENSITIVE_LOGON enables ordisables password case sensitivity in the database.

 

Values:

(1)true

Database logonpasswords are case sensitive.

(2)false

Database logonpasswords are not case sensitive.

 

  用户如果是从Oracle 10g导入的,那么PASSWORD_VERSIONS的值就是“10G”,维护区分大小写的密码不依赖于 SEC_CASE_SENSITIVE_LOGON参数设置。假设SEC_CASE_SENSITIVE_LOGON参数被设置为TRUE,密码立即变为大小写敏感。

 

SQL> select * from v$version whererownum=1;

 

BANNER

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

Oracle Database 11g Enterprise EditionRelease 11.2.0.1.0 - 64bit Production

 

SQL> show parameter password_versions

SQL>

 

2.1.2 口令文件

C:\Users\Administrator.DavidDai>orapwd

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

 

 where

   file - name of password file (required),

   password - password for SYS will be prompted if not specified at commandline,

   entries - maximum number of distinct DBA (optional),

   force - whether to overwrite existing file (optional),

   ignorecase - passwords are case-insensitive (optional),

   nosysdba - whether to shut out the SYSDBA logon (optional Database Vaultonly).

 

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

 

 

  orapwd工具的ignorecase参数允许你控制在密码文件中的密码是否大小写敏感,它的默认值是“n”,即默认大小写敏感。如果特权用户(SYSDBA和SYSOPER)是从之前的数据库版本中导入的,它们的密码也会包括在密码文件中,这些用户将会保留大小写敏感的密码,直到密码被修改。

  

如果指定ignorecase=y,则Oracle会忽略密码验证时密码的大小写。

 

2.2 示例一

 

SQL> show parameter sec_case_sensitive_logon

NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon            boolean     TRUE

 

--创建测试用户:

SQL> create user dave identified byDavE;

User created.

SQL> grant connect,resource to dave;

Grant succeeded.

 

SQL> conn dave/dave;

ERROR:

ORA-01017: invalid username/password; logondenied

 

Warning: You are no longer connected toORACLE.

SQL> conn dave/DavE;

Connected.

--这里区分大小写

 

 

--修改参数:

SQL> conn / as sysdba;

Connected.

SQL> alter system set sec_case_sensitive_logon=false;

System altered.

 

SQL> show parametersec_case_sensitive_logon

NAME                    TYPE        VALUE

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

sec_case_sensitive_logon     boolean    FALSE

 

SQL> conn dave/dave;

Connected.

--禁用sec_case_sensitive_logon 就不区分大小写了。

 

 

2.3 示例二

       在上面我们是通过sec_case_sensitive_logon 来设置的,这里我们通过口令文件参数来进行设置。

 

       在Oracle 11g中,口令文件的ignorecase 参数用于设置sysdba或sysoper权限通过密码文件登陆时是否区分大小写。默认情况下,ignorecase 参数是区分大小写的。

       注意这里的ingorecase 参数仅仅是在密码文件中创建大小写敏感的密码。

 

                                

先禁用OS 认证,具体操作参考:

Oracle OS认证 口令文件 密码丢失处理

http://blog.csdn.net/tianlesoftware/article/details/4698293

 

SQL>show parametersec_case_sensitive_logon

 

NAME                                 TYPE        VALUE

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

sec_case_sensitive_logon             boolean     TRUE

 

 

C:\Users\Administrator.DavidDai>orapwdfile=D:\app\Administrator\product\11.2.0\dbhome_1\database\pwdDAVE.orapassword=OraclE force=y ignorecase=y

 

 

--测试ignorecase参数对赋予sysdba 权限用户的影响:

C:\Users\Administrator.DavidDai>

 

SQL> conn / as sysdba

Connected.

SQL> create user dave1 identified byDavE;

User created.

 

SQL> grant connect,resource to dave1;

Grant succeeded.

 

SQL> conn dave1/dave;

ERROR:

ORA-01017: invalid username/password; logondenied

 

Warning: You are no longer connected toORACLE.

SQL> conn dave1/DavE;

Connected.

--这里也必须使用正确的密码,包括大小写。

 

SQL> conn / as sysdba;

Connected.

 

SQL> grant sysdba,sysoper to dave1;

Grant succeeded.

 

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS

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

SYS                            TRUE  TRUE FALSE

DAVE1                          TRUE  TRUE FALSE

 

SQL> conn dave1/DavE;

Connected.

SQL> conn dave1/dave;

ERROR:

ORA-01017: invalid username/password; logondenied

 

 

Warning: You are no longer connected to ORACLE.

--通过这个测试我们可以看出,在创建口令文件时对后来赋予sysdba 权限的用户来说,没有影响,不能指定其是否忽略大小写。

 

 

--测试SYS 用户:

我们创建口令文件时就是争对这个这个用户的。

 

SQL> conn sys/oracle as sysdba;

Connected.

SQL> conn sys/OraclE as sysdba;

Connected.

SQL> conn sys/dave as sysdba;

ERROR:

ORA-01017: invalid username/password; logondenied

 

 

Warning: You are no longer connected toORACLE.

--这里SYS 用户成功忽略了大小写问题。

 

 

小结:

通过以上的2个测试,可以得出结论:

(1)    sec_case_sensitive_logon参数可以指定用户的口令是否区分大小写。

(2)    口令文件中的ignorecase 参数仅仅争对创建时是否区分大小写,简言之,只能争对SYS用户。

 

 

三.  Oracle 10g,11g DBlink

通过前面的说明,可以看到Oracle 10g与11g中对密码出的验证策略不同,所以如果在不同版本库之间建DBLINK,那么密码也就会成为一个问题,可能出现密码不对的问题,具体的注意事项如下:

 

(1)11g连接到11g:

创建数据库连接时,密码必须与远程数据库用户的密码大小写一致。  

 

(2)11g连接到11g以前的数据库:

创建数据流连接时用的密码大小写随意,因为远程数据库会忽略大小写的。  

 

(3)11g以前的数据库连接到11g:

将远程用户的密码修改为大写,或者用引号括起来,只有这样才能通过11g以前的数据库验证。

 

 

 

 

 

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

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Skype: tianlesoftware

Email:   tianlesoftware@gmail.com

Blog:     http://www.tianlesoftware.com

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

 

 

-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929   DBA5群: 142216823

DBA6 群:158654907    DBA7 群:172855474   DBA总群:104207940

posted @ 2012-03-22 14:35  hibernate例子  阅读(297)  评论(0编辑  收藏  举报