sys用户在sys.user$中的一些特殊现象浅析

这篇具有很好参考价值的文章主要介绍了sys用户在sys.user$中的一些特殊现象浅析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Oracle数据库中,一般我们使用sys.user或dba_users去监控/检查用户密码是否快过期,另外,它还能监控新用户的创建时间、账号密码过期、账号修改时间等,dba_user其实是一个系统视图,它的数据来源于sys.user$等基础表。dba_user的定义如下所示:

CREATE FORCE VIEW "SYS"."DBA_USERS" ("USERNAME""USER_ID""PASSWORD""ACCOUNT_STATUS""LOCK_DATE""EXPIRY_DATE""DEFAULT_TABLESPACE""TEMPORARY_TABLESPACE""LOCAL_TEMP_TABLESPACE""CREATED""PROFILE""INITIAL_RSRC_CONSUMER_GROUP""EXTERNAL_NAME""PASSWORD_VERSIONS""EDITIONS_ENABLED""AUTHENTICATION_TYPE""PROXY_ONLY_CONNECT""COMMON""LAST_LOGIN""ORACLE_MAINTAINED""INHERITED""DEFAULT_COLLATION""IMPLICIT""ALL_SHARD""PASSWORD_CHANGE_DATE"AS
  select u.name, u.user#,
     decode(u.password, 'GLOBAL', u.password,
                        'EXTERNAL', u.password,
                        NULL),
     m.status,
     decode(mod(u.astatus, 16), 4, u.ltime,
                                5, u.ltime,
                                6, u.ltime,
                                8, u.ltime,
                                9, u.ltime,
                                10, u.ltime, to_date(NULL)),
     decode(mod(u.astatus, 16),
            1, u.exptime,
            2, u.exptime,
            5, u.exptime,
            6, u.exptime,
            9, u.exptime,
            10, u.exptime,
            decode(u.password, 'GLOBAL'to_date(NULL),
                               'EXTERNAL'to_date(NULL),
              decode(u.ptime, ''to_date(NULL),
                decode(pr.limit#, 2147483647, to_date(NULL),
                 decode(pr.limit#, 0,
                   decode(dp.limit#, 2147483647, to_date(NULL), u.ptime +
                     dp.limit#/86400),
                   u.ptime + pr.limit#/86400))))),
     dts.name, tts.name, ltts.name,
     u.ctime, p.name,
     nvl(cgm.consumer_group, 'DEFAULT_CONSUMER_GROUP'),
     u.ext_username,
     decode(bitand(u.spare1, 65536), 65536NULLdecode(
       REGEXP_INSTR(
         NVL2(u.password, u.password, ' '),
         '^                $'
       ),
       0,
       decode(length(u.password), 16'10G 'NULL),
       ''
     ) ||
     decode(
       REGEXP_INSTR(
         REGEXP_REPLACE(
           NVL2(u.spare4, u.spare4, ' '),
           'S:000000000000000000000000000000000000000000000000000000000000',
           'not_a_verifier'
         ),
         'S:'
       ),
       0'''11G '
     ) ||
     decode(
       REGEXP_INSTR(
         NVL2(u.spare4, u.spare4, ' '),
         'T:'
       ),
       0'''12C '
     ) ||
     decode(
       REGEXP_INSTR(
         REGEXP_REPLACE(
           NVL2(u.spare4, u.spare4, ' '),
           'H:00000000000000000000000000000000',
           'not_a_verifier'
         ),
         'H:'
       ),
       0'''HTTP '
     )),
     decode(bitand(u.spare1, 16),
            16'Y',
                'N'),
     decode(bitand(u.spare1,65536), 65536'NONE',
                   decode(u.password, 'GLOBAL',   'GLOBAL',
                                      'EXTERNAL''EXTERNAL',
                                      'PASSWORD')),
     decode(bitand(u.spare1, 10272),
            32'Y'2048'Y',  2080'Y',
          8192'Y'8224'Y'10240'Y',
         10272'Y',
                'N'),
     decode(bitand(u.spare1, 128), 0'NO''YES'),
    from_tz(to_timestamp(to_char(u.spare6, 'DD-MON-YYYY HH24:MI:SS'),
                          'DD-MON-YYYY HH24:MI:SS'), '0:00')
     at time zone sessiontimezone,
     decode(bitand(u.spare1, 256), 256'Y''N'),
     decode(bitand(u.spare1, 4224),
            128decode(SYS_CONTEXT('USERENV''CON_ID'), 1'NO''YES'),
            4224decode(SYS_CONTEXT('USERENV''IS_APPLICATION_PDB'),
                         'YES''YES''NO'),
            'NO'),
     nls_collation_name(nvl(u.spare3, 16382)),
     -- IMPLICIT
     decode(bitand(u.spare1, 32768), 32768'YES''NO'),
     -- ALL_SHARD
     decode(bitand(u.spare1, 16384), 16384'YES''NO'),
     -- PASSWORD_CHANGE_DATE
     u.ptime
     from sys.user$ u
          left outer join sys.resource_group_mapping$ cgm
          on (cgm.attribute = 'ORACLE_USER' and cgm.status = 'ACTIVE' and
              cgm.value = u.name) left outer join sys.ts$ ltts
                                       on (u.spare9 = ltts.ts#),
          sys.ts$ dts, sys.ts$ tts, sys.profname$ p,
          sys.user_astatus_map m, sys.profile$ pr, sys.profile$ dp
    where u.datats# = dts.ts#
     and u.resource$ = p.profile#
     and u.tempts# = tts.ts#
     and ((u.astatus = m.status#) or
          (u.astatus = (m.status# + 16 - BITAND(m.status#, 16))))
     and u.type# = 1
     and u.resource$ = pr.profile#
     and dp.profile# = 0
     and dp.type#=1
     and dp.resource#=1
     and pr.type# = 1
     and pr.resource# = 1;

但是在sys.user$中,sys用户非常特殊,下面简单介绍一下一些特殊现象(问题),希望你在遇到时有所帮助,下面测试的版本为Oracle 19.16.0.0.0等好几个版本测试环境

现象1:sys用户的expiry_date不准确。

一般我们给用户sys/system等用户设置一个自定义profile,密码60天过期,但是临近密码快过期,你监控或检查密码快过期时,你会发现sys用户密码过期时间不正确(system用户正确)。

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> set pagesize 60 linesize 200
SQLcol username for a25
SQLcol account_status for a25
SQLcol profile for a30
SQLselect username,account_status,profile,expiry_date,password_versions from dba_users
  2  where username IN ('SYS','SYSTEM')
  3  order by 2,4,1
  4  /

USERNAME   ACCOUNT_STATUS   PROFILE           EXPIRY_DATE         PASSWORD_VERSIONS
---------- ---------------- ----------------- ------------------- ---------------------------------------------------
SYS        OPEN             C##DBA_PROFILE    2021-09-21 12:23:59 10G 11G 12C HTTP
SYSTEM     OPEN             C##DBA_PROFILE    2024-07-08 16:34:03 10G 11G 12C HTTP

SQL>

如上所示,sys用户的EXPIRE_DATE似乎跟其它账号不一样,它一成不变,它的值不准确(原因稍后述说)。

现象2:sys用户的用户密码修改后,ptime(用户密码修改时间)不会变化。

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select name,ctime,ptime,exptime from sys.user$ where name='SYS';

NAME               CTIME               PTIME               EXPTIME
------------------ ------------------- ------------------- -------------------
SYS                2019-04-17 00:56:32 2019-04-17 00:56:32 2021-09-21 12:23:59
SQL> alter user sys identified by "KjdhuHd31837KJD";
SQL> select name,ctime,ptime,exptime from sys.user$ where name='SYS';

NAME               CTIME               PTIME               EXPTIME
------------------ ------------------- ------------------- -------------------
SYS                2019-04-17 00:56:32 2019-04-17 00:56:32 2021-09-21 12:23:59
SQL> 

其实有些版本(例如Oracle 12.2.0.1)是因为Bug问题(Bug 28538439 ),例如Bug 28538439 - USER$.PTIME Is Not Updated for SYS User After Applying 12.2.0.1.180717 RU (Doc ID 28538439.8)

sys用户在sys.user$中的一些特殊现象浅析

而有些则是因为隐藏参数设置问题。如下所示

SQL> set linesize 680;
SQL> col inst_id for 99999
SQL> col con_id for 99999
SQL> col name for a20;
SQL> col description for a18;
SQL> col value for a8;
SQL> select x.inst_id
  2       , y.con_id
  3       , x.ksppinm  name
  4       , x.ksppdesc description
  5       , y.ksppstvl  value
  6       , y.ksppstdf  isdefault
  7       , decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod
  8       , decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj 
  9  from sys.x$ksppi x, sys.x$ksppcv y 
 10  where 1=1 and x.inst_id = y.inst_id and x.indx = y.indx and x.ksppinm like '%_enable_ptime%';

INST_ID CON_ID NAME                 DESCRIPTION        VALUE    ISDEFAULT ISMOD      ISADJ
------- ------ -------------------- ------------------ -------- --------- ---------- -----
      1      1 _enable_ptime_update Enable/Disable upd FALSE    TRUE      FALSE      FALSE
               _for_sys             ate of user$ for s
                                    ys

SQL> 

我们修改隐藏参数_enable_ptime_update_for_sys的值,然后重启数据库数据库。

alter system set "_enable_ptime_update_for_sys"=true scope=spfile;
SQL> alter system set "_enable_ptime_update_for_sys"=true scope=spfile;

注意:有些数据库版本由于补丁缘故,可能不存在隐藏参数_enable_ptime_update_for_sys。

数据库实例重启过后,我们重新测试,你会发现修改sys密码后,密码修改时间(PTIME)会正确更新,如下所示:文章来源地址https://www.toymoban.com/news/detail-710799.html

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select name,ctime,ptime,exptime from sys.user$ where name='SYS';

NAME                 CTIME               PTIME               EXPTIME
-------------------- ------------------- ------------------- -------------------
SYS                  2019-04-17 00:56:32 2019-04-17 00:56:32 2024-04-13 21:51:05
SQL> alter user sys identified by "KjdhuHd31837KJD1";
SQL> select name,ctime,ptime,exptime from sys.user$ where name='SYS';

NAME                 CTIME               PTIME               EXPTIME
-------------------- ------------------- ------------------- -------------------
SYS                  2019-04-17 00:56:32 2023-10-16 22:34:32 2024-04-13 22:34:32
SQL> 
sys用户在sys.user$中的一些特殊现象浅析

到了这里,关于sys用户在sys.user$中的一些特殊现象浅析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 定积分解题的一些特殊方法习题

    前置知识:定积分解题的一些特殊方法 习题1 比较定积分的大小: ∫ 0 1 1 1 + x 2 d x ‾ ∫ 0 1 1 1 + x 4 d x int_0^1dfrac{1}{1+x^2}dxunderline{qquad}int_0^1dfrac{1}{1+x^4}dx ∫ 0 1 ​ 1 + x 2 1 ​ d x ​ ∫ 0 1 ​ 1 + x 4 1 ​ d x 解: qquad 因为在 [ 0 , 1 ] [0,1] [ 0 , 1 ] 上 1 1 + x 2 ≤ 1 1 + x 4 dfrac{1}{1

    2024年02月08日
    浏览(34)
  • Oracle Users表空间重命名

    需求:默认无法直接删除Oracle的users表空间,直接尝试删除会有报错如下: 报错很明确,USERS目前作为数据库目前默认的永久表空间,暂不支持直接删除。 进一步查询,看到有很多用户的确是默认用到了USERS表空间: 但现在XTTS测试,客户现有源端的users表空间也需要迁移(有

    2024年02月08日
    浏览(39)
  • oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,

    通过kettle采集数据时,表输入的组件,查询报错。 ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE”, line 272 ORA-06512: at line 1 通过 ALTER SESSION SET EVENTS ‘31156 trace name context forever, level 0x400’; 修改会话配置 或直接修改system配置 ALTER system SET EVENTS ‘31156 trace name context forever, level 0x400’

    2024年02月07日
    浏览(51)
  • 【离散数学期复习系列】五、一些特殊的图

    1.二部图 (1)二部图(偶图): 若能将无向图G=V,E的顶点集V划分成两个不相交的非空子集V1和V2,使得G中任 何一条边的两个端点一个属于V1,另一个属于V2 ,则称G为二部图,V1,V2称为互补顶点子集,此时可将G记成G=V1,V2,E. (2)完全二部图: 若V1中每一个顶点与V2中每一个顶点均有且仅有一条边

    2024年02月09日
    浏览(43)
  • win11中的pagefile.sys

    在C盘系统下,有一个命名为pagefile.sys的文件占用C盘太大的空间,不少用户怕删除pagefile.sys文件之后会对系统造成影响,而不少用户想要将pagefile.sys文件移动到D盘中。那么pagefile.sys是什么文件?Win10系统下pagefile.sys文件太大如何移动到D盘中? pagefile.sys是什么文件? pagefile.s

    2024年02月16日
    浏览(32)
  • 安全等保加固重命名SYS用户触发ORA-600[kokasgi1]错误案例分享

            欢迎 关注“数据库运维之道”公众号 ,一起学习数据库技术! 本期将为大家分享“安全等保加固重命名SYS用户触发ORA-600[kokasgi1]错误”的处置案例。         :ORA-600[kokasgi1]、10046 trace、gdb         根据数据库等保要求:应重命名或删除默认账户,修

    2024年04月12日
    浏览(38)
  • Oracle 19c Linux平台启动时出现ORA-00800错误浅析

    这里简单介绍一下如何处理解决Linux平台下Oracle 19c启动时,告警日志出现ORA-00800错误的问题,详情介绍请见下面内容: 操作系统:Red Hat Enterprise Linux release 8.8 (Ootpa) 数据库 :19.16.0.0.0 企业版 在Oracle 19c启动时,在Oracle的告警日志中会出现下面这样一条告警信息: 分析ORA-008

    2024年02月06日
    浏览(46)
  • cls_oracle_logs.sh脚本遭遇TNS-12508错误浅析

    cls_oracle_logs.sh脚本的输出日志中有TNS-12508错误,具体如下所示 调试跟踪发现,脚本在切割监听日志时,执行命令set log_status off/set log_status on时报TNS-12508错误,部分脚本如下所示: 如下测试所示 出现这个现象,是因为我们在监听参数文件listener.ora中设置了参数ADMIN_RESTRICTIONS_l

    2024年04月24日
    浏览(27)
  • 【一些随笔】浅析 Linux和Windows:系统介绍、操作差异与使用技巧解析

    Linux和Windows系统的操作差异; Linux系统介绍、系统监控和优化技巧、Shell脚本编程技巧、一些命令使用技巧; Windows系统介绍、优化和加速技巧、一些在Windows系统下常用的快捷键; 在使用Linux和Windows时,有一些事情可能在Linux上较为顺理成章,而在Windows上可能令人费解。比如

    2024年02月13日
    浏览(48)
  • Windows中的Pagefile.sys是什么?是否应该删除它?

    当您的 Windows 计算机的存储空间不足时,您可能会发现自己正在寻找释放其中一些空间的方法。 您可能遇到的这些非常规方法之一是删除 Pagefile.sys 文件。 但在考虑删除它之前,您应该知道 Pagefile.sys 是什么以及是否应该首先删除它。 以下是大眼仔为你整理关于 Pagefile.sys 中

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包