管理用户密码版本

默认情况下,Oracle数据库使用不允许不区分大小写的密码的独占模式来管理密码版本。

在默认安装中,​​SQLNET.ALLOWED_LOGON_VERSION_SERVER​​参数设置​​12​​为启用独占模式。独占模式要求基于密码的身份验证协议对正在进行身份验证的帐户使用区分大小写的密码版本(​​11G​​或​​12C​​)之一。独占模式不包括使用​​10G​​早期版本中使用的密码版本。升级到Oracle Database 12 c第 2版(12.2)后,使用​​10G​​密码版本的帐户将无法访问。这是因为默认情况下服务器以独占模式运行,而独占模式不能使用旧​​10G​​密码版本来验证客户端。服务器没有用于验证客户端的密码版本。版本10g中的用户帐户使用​​10G​​密码版本。因此,您应找到使用​​10G​​密码版本的用户帐户,然后重置这些帐户的密码。这将根据​​SQLNET.ALLOWED_LOGON_VERSION_SERVER​​参数的设置生成相应的密码版本,如下所示:

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
    产生这三个密码版本10G
    ,11G
    和12C
  • SQLNET.ALLOWED_LOGON_VERSION_SERVER=12
    生成密码11G
    和12C
    密码版本,并删除10G
    密码版本。
  • SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a
    仅生成12C
    密码版本。


1. 如果您首先将​​SQLNET.ALLOWED_LOGON_VERSION_SERVER​​设置8,如果将用户帐户从Oracle数据库版本10 g(或更早版本)版本导入当前数据库版本,那么因为​​10G​​密码版本不区分大小写,这些用户仍然可以使用任何情况下的密码登录数据库(大小写都可以)。2. 当这样的用户更改其密码,新的​​11G​​和​​12C​​正在自动生成的密码版本,并且其密码将自动成为区分大小写,因为该实例的初始化参数的默认值​SEC_CASE_SENSITIVE_LOGON是TRUE​。(意识到​​SEC_CASE_SENSITIVE_LOGON​​ 不推荐使用,但目前保留是为了向后兼容, 但是如果强行将SEC_CASE_SENSITIVE_LOGON 改为false ,那么更改用户密码使用alter user xxx identified by  values 'user$.spare4'  的方式,将会报ora-01017)


即: SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 时

    从10g及以前的版本导入时,仍用以前的密码版本,不区分大小写,但是一旦更改该帐号密码,将用新的密码版本,区分大小写,因为实例的初始化参数的默认值​SEC_CASE_SENSITIVE_LOGON是TRUE​。


注:在18C中不推荐使用SEC_CASE_SENSITIVE_LOGON参数。它仅为了向后兼容而保留。 (文档ID 2502204.1)


查找当前用户的所有密码版本

您可以查询​​DBA_USERS​​数据字典视图以查找用户帐户具有的所有密码版本的列表 ,版本参数受 sqlnet.ora   SQLNET.ALLOWED_LOGON_VERSION_SERVER 参数影响。

例如:

SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;

USERNAME PASSWORD_VERSIONS
------------------------------ -----------------
JONES 10G 11G 12C
ADAMS 10G 11G
CLARK 10G 11G
PRESTON 11G
BLAKE 10G

该​​PASSWORD_VERSIONS​​列显示该帐户存在的密码版本列表。​​10G​​是指早期不区分大小写的Oracle密码版本,​​11G​​是指基于SHA-1的密码版本,​​12C​​是指基于SHA-2的SHA-512密码版本。



例:

SYS@orcl>show parameter sec_case_sensitive_logon                                      #该参数默认为true

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


SYS@orcl>create user huyi identified by huyi;
User created.

SYS@orcl>grant create session to huyi ;
Grant succeeded.

SYS@orcl>select USERNAME,PASSWORD_VERSIONS from dba_users where username='HUYI';
USERNAME PASSWORD_VERSIONS
-------------------- --------------------
HUYI 11G 12C

SYS@orcl>select NAME,PASSWORD,SPARE4 from user$ where name='HUYI';

NAME PASSWORD SPARE4
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HUYI S:C4908554DA822CC7940B9B358C4379F6281F520A160D847754DFCE9C93C0;T:53C08F48F150A31703C2661D1658198473C0AEEC4301B8628ACB18877A4199139A3C8C08E20AFDB1CB2D3A027B37CB327BB5260B7493E0E2EA241620B87EE9D9B78706C
CBF9CC4CB8CCBBDA78287D9C0



SYS@orcl>alter user huyi identified by 123;
User altered.

SYS@orcl>select NAME,PASSWORD,SPARE4 from user$ where name='HUYI';

NAME PASSWORD SPARE4
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HUYI S:A5C3F5954E1A36063AE193B8DFAA96F2E7EC585B60685BFAA93F73F20B30;T:3EFBB5D5BB94C821CD3B4C41F66C942F4BEA3995527544200BED5DA8DFEFA491C32DC4D100FE4F004C637BA9BC8E33884BE9608E6571F504BBEFA05BB32C73A81CE1A0B
F4C6BC6B6D1ABB2291C0909B5


SYS@orcl>alter user huyi identified by 123;
User altered.

SYS@orcl>select NAME,PASSWORD,SPARE4 from user$ where name='HUYI';
NAME PASSWORD SPARE4
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HUYI S:35E35BF21655390E8F9CF476F81BA7D789DFA28B67F09E6A08D6CCA071CC;T:788BBFA7178299B95B3A7AF927D831352AF0B47ED166146BE8A44F6EAD7C09986472A0B73E576EB9DAFAAC46CC34ACA671A436B06B3243834B7D60DC48D39BB8867EF8F
7230A9D7D9B81EA76A6618DC3

#注,更改相同的密码值,SPARE4的值也是不一样的。


SYS@orcl>alter user huyi identified by values 'S:35E35BF21655390E8F9CF476F81BA7D789DFA28B67F09E6A08D6CCA071CC;T:788BBFA7178299B95B3A7AF927D831352AF0B47ED166146BE8A44F6EAD7C09986472A0B73E576EB9DAFAAC46CC34ACA671A436B06B3243834B7D60DC48D39BB8867EF8F7230A9D7D9B81EA76A6618DC3';
User altered.

SYS@orcl>conn huyi/123
Connected.






SYS@orcl>alter system set sec_case_sensitive_logon=false ;              #更改参数为false ,不区分大小写
System altered.

SYS@orcl>select NAME,PASSWORD,SPARE4 from user$ where name='HUYI';
NAME PASSWORD SPARE4
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HUYI S:35E35BF21655390E8F9CF476F81BA7D789DFA28B67F09E6A08D6CCA071CC;T:788BBFA7178299B95B3A7AF927D831352AF0B47ED166146BE8A44F6EAD7C09986472A0B73E576EB9DAFAAC46CC34ACA671A436B06B3243834B7D60DC48D39BB8867EF8F
7230A9D7D9B81EA76A6618DC3


SYS@orcl>alter user huyi identified by values 'S:35E35BF21655390E8F9CF476F81BA7D789DFA28B67F09E6A08D6CCA071CC;T:788BBFA7178299B95B3A7AF927D831352AF0B47ED166146BE8A44F6EAD7C09986472A0B73E576EB9DAFAAC46CC34ACA671A436B06B3243834B7D60DC48D39BB8867EF8F7230A9D7D9B81EA76A6618DC3';
User altered.


oracle[test01]/home/oracle> sqlplus huyi/123
SQL*Plus: Release 12.2.0.1.0 Production on Thu Jun 27 23:50:43 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied #ORA-01017 登录失败



SYS@orcl>alter system set sec_case_sensitive_logon=true ; #更改为默认值

oracle[test01]/home/oracle> sqlplus huyi/123 #登录成功
SQL*Plus: Release 12.2.0.1.0 Production on Thu Jun 27 23:51:17 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

TEST@orcl>