[20151007]关于11G密码.txt

简介: [20151007]关于11G密码.txt --从11G开始密码开始区分大小写的,通过参数SEC_CASE_SENSITIVE_LOGON参数来控制的。该参数默认设置为true。

[20151007]关于11G密码.txt

--从11G开始密码开始区分大小写的,通过参数SEC_CASE_SENSITIVE_LOGON参数来控制的。该参数默认设置为true。
--我自己曾遇到升级后出现用户程序不区分大小写,导致在反复尝试后出现library cache lock,我记得当时自己也是手忙脚乱的,因为
--以前没遇到过,好在当时开发及时发现问题。

-- http://blog.itpub.net/267265/viewspace-1479718/

--正好放假期间,别人的系统升级也遇到这个问题,打电话来问,提示事件出现library cache lock,猜测也是密码问题。

--最简单的方法统一密码,修正程序错误,当然应急可以修改参数SEC_CASE_SENSITIVE_LOGON=false。
--我个人认为设置ALTER SYSTEM SET EVENT = '28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE最不可取。

--实际上还有最简单的方法,就是让这个用户选择10g的密码方式,这也是目前最常用的方式。通过例子来说明:

1.测试环境:
SYS@test> @ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

SCOTT@test01p> select name,password,spare4 from sys.user$ where name='SCOTT';
NAME                 PASSWORD                       SPARE4
-------------------- ------------------------------ ----------------------------------------------------------------------------------------------------
SCOTT                57964D8CE8DC6EB2               S:11492E95A3786A4EF1D415619AA186C2F560E811EF0D5FF99256EC6038E9;H:AFB3A8C4DBB1F9C3271E68E986F0772B
                                                   
SCOTT@test01p> select username,password_versions from dba_users where username='SCOTT';
USERNAME             PASSWORD_VER
-------------------- ------------
SCOTT                10G 11G

--可以发现目前的scott用户支持10g 11G两个版本。前面查询到是10g,11g对应的口令加密串。
--如果查询视图定义:

select * from dba_views where view_name ='DBA_USERS';

...
decode(length(u.password), 16, '10G ', NULL) ||
              decode(REGEXP_INSTR(NVL2(u.spare4, u.spare4, ' '),
                                  'S:'), 0, '', '11G ') ||
              decode(REGEXP_INSTR(NVL2(u.spare4, u.spare4, ' '),
                                  'T:'), 0, '', '12C '),

--u 对应 sys.user$,可以发现判断就是通过sys.user$字段password,spare4.
--注意1个小细节,12C实际上开头对应的是T:,我的测试是12c,而选择的还是11G的口令方式,不知道存在什么差别,或者将来12c会改变加密算法。

2.如果执行如下:
SCOTT@test01p> alter USER SCOTT IDENTIFIED BY values '57964D8CE8DC6EB2';
User altered.

SCOTT@test01p> select name,password,spare4 from sys.user$ where name='SCOTT';
NAME                 PASSWORD                       SPARE4
-------------------- ------------------------------ ---------------------------------------------------
SCOTT                57964D8CE8DC6EB2

SCOTT@test01p> select username,password_versions from dba_users where username='SCOTT';
USERNAME             PASSWORD_VER
-------------------- ------------
SCOTT                10G

--这样等于这个用户的口令模式回到了10g的模式,依旧大小写不区分,通过这个方式避免升级出现的问题。大家可以测试。
--如果执行如下,口令模式是11g。

SCOTT@test01p> alter USER SCOTT IDENTIFIED BY values 'S:11492E95A3786A4EF1D415619AA186C2F560E811EF0D5FF99256EC6038E9;H:AFB3A8C4DBB1F9C3271E68E986F0772B';
User altered.

--注:12c在口令串的最后还有1串';H:AFB3A8C4DBB1F9C3271E68E986F0772B',不知道表示什么,也许PDB里面的sid名之类的信息。

SCOTT@test01p> column password format a30
SCOTT@test01p> column spare4 format a100
SCOTT@test01p> select name,password,spare4 from sys.user$ where name='SCOTT';

NAME                 PASSWORD                       SPARE4
-------------------- ------------------------------ ----------------------------------------------------------------------------------------------------
SCOTT                                               S:11492E95A3786A4EF1D415619AA186C2F560E811EF0D5FF99256EC6038E9;H:AFB3A8C4DBB1F9C3271E68E986F0772B

SCOTT@test01p> select username,password_versions from dba_users where username='SCOTT';
USERNAME             PASSWORD_VER
-------------------- ------------
SCOTT                11G

--如果想回到前面支持10g,11G两种模式,可以使用password修改口令:

SCOTT@test01p> select name,password,spare4 from sys.user$ where name='SCOTT';
NAME                 PASSWORD                       SPARE4
-------------------- ------------------------------ ----------------------------------------------------------------------------------------------------
SCOTT                57964D8CE8DC6EB2               S:6567A66772519C8C47C2911405CCC9AE7C16D6E89F0801B3E91E4B17B607;H:AFB3A8C4DBB1F9C3271E68E986F0772B
                                                                                              ~~~~~~~~~~~~~~~~~~~~    

SCOTT@test01p> select username,password_versions from dba_users where username='SCOTT';
USERNAME             PASSWORD_VER
-------------------- ------------
SCOTT                10G 11G

--注意看我修改的口令还是原来的,PASSWORD还是一样,SPARE4不同,因为后面slot(~部分每次生成都不一样)。

3.简单探究11G口令的加密:
--后面;H:AFB3A8C4DBB1F9C3271E68E986F0772B 对于密码一样都是不变的,不知道表示什么?也许我使用的是12c,估计与pdb有关。密码变化,这个串也不会边。
--家里仅仅有12c环境,上班看了11g确实没有后面那一串。
--分号前面的20位是slot(占用10个字节),如~.
--知道这个9F0801B3E91E4B17B607,加上密码明文,可以还原加密串。例子:

SYS@test01p> set serveroutput on
SYS@test01p> exec dbms_output.put_line('S:'||dbms_crypto.hash(utl_raw.cast_to_raw('btbtms')||'9F0801B3E91E4B17B607',dbms_crypto.HASH_SH1)||'9F0801B3E91E4B17B607');
S:6567A66772519C8C47C2911405CCC9AE7C16D6E89F0801B3E91E4B17B607
PL/SQL procedure successfully completed.
--对比前面的信息正好对上。


4.既然使用sh1加密算法,一些命令行工具也可以实现。
--建立一个文件,执行openssl dgst -sha1就ok了,测试看看。

$ echo -n "btbtms" | xxd -c 16
0000000: 6274 6274 6d73                           btbtms

--建立文件aa.txt,因为后面的ascii无法输入,先输入如下,后面的信息是slot,通过xxd转换就ok了。aa.txt内容如下:

0000000:6274 6274 6d73 9F08 01B3 E91E 4B17 B607

--另外我的测试不要空格也是ok的。

$ xxd -r aa.txt |  openssl dgst -sha1 | tr 'a-z' 'A-Z'
6567A66772519C8C47C2911405CCC9AE7C16D6E8

--对比上面可以发现如果包括slot信息,内容一致。

目录
相关文章
|
数据安全/隐私保护
SVN更改用户名和密码
SVN更改用户名和密码
117 0
|
安全 Linux Shell
手动修改/etc/shadow和/etc/passwd中的用户密码
1.手动修改/etc/shadow中的用户密码 /etc/shadow文件 第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起...
3749 0
|
算法 Apache 数据安全/隐私保护
|
Shell Linux 数据安全/隐私保护
|
Oracle 关系型数据库 数据库
[20170628]11g修改用户名.txt
[20170628]11g修改用户名.txt --//昨天看了链接,提到修改用户名: http://www.oratea.com/2017/06/26/oracle-11g%e4%bf%ae%e6%94%b9%e7%94%a8%e6%88%b7%e5%90%8d/ --//自己也测试看看.
944 0
|
安全 测试技术 数据库
[20170607]10g dblink的密码.txt
[20170607]10g dblink的密码.txt --//10g下建立的dblink密码非常容易破解.只要能访问表sys.link$,做一个简单的测试来说明,实际上这个问题在11.
1096 0
|
SQL Oracle 前端开发
[20170329]还原用户口令信息.txt
[20170329]还原用户口令信息.txt --//上午在例行检查中发现发现sys.aud$增加异常. col object_name format a40 col owner format a40 prompt 日期1 日期2 显示行数 SELECT *   FROM (  SELECT dhso.
861 0

热门文章

最新文章