zoukankan      html  css  js  c++  java
  • Oracle在线重定义导致其他用户查询权限丢失

    Oracle在线重定义导致其他用户查询权限丢失

    最近通过对大表进行在线重定义迁移表空间的时候,发现其他用户对该表的查询权限丢失。

    现在模拟下该问题。

    版本:11.2.0.4.201020

    脚本:

    create table ZKM.FILE_MS
    (
    ID            NUMBER NOT NULL primary key ,
    SFILE_NAME    VARCHAR2(200)           ,
    RFILE_NAME    VARCHAR2(200)           ,
    RSTATUS       VARCHAR2(2)             ,
    RINFO         VARCHAR2(2000)          ,
    MID           VARCHAR2(100)           ,
    CREATE_TIME      DATE                  
    );
    
    grant select on ZKM.FILE_MS to SCOTT;
    
    create table ZKM.FILE_MS_TMP
    (
    ID            NUMBER NOT NULL primary key,
    SFILE_NAME    VARCHAR2(200)           ,
    RFILE_NAME    VARCHAR2(200)           ,
    RSTATUS       VARCHAR2(2)             ,
    RINFO         VARCHAR2(2000)          ,
    MID           VARCHAR2(100)           ,
    CREATE_TIME      DATE                  
    )
    PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'month')) 
    (    partition part_t01 values less than(to_date('2019-08', 'yyyy-mm')));
    
    
    EXEC Dbms_Redefinition.can_redef_table('ZKM','FILE_MS');
    
    
    BEGIN
    DBMS_REDEFINITION.start_redef_table(
    uname => 'ZKM', 
    orig_table => 'FILE_MS',
    int_table => 'FILE_MS_TMP');
    END;
    /
    
    
    BEGIN
    dbms_redefinition.sync_interim_table(
    uname => 'ZKM', 
    orig_table => 'FILE_MS',
    int_table => 'FILE_MS_TMP');
    END;
    /
    
    BEGIN
    dbms_redefinition.finish_redef_table(
    uname => 'ZKM',
    orig_table => 'FILE_MS',
    int_table => 'FILE_MS_TMP');
    END;
    /
    
    drop table ZKM.FILE_MS_TMP purge;
    drop user zkm cascade;
    View Code

    首先构造表FILE_MS,然后对该表进行在线重定义。

    09:35:18 SYS@testdb(328)> create table ZKM.FILE_MS
    09:35:43   2  (
    09:35:43   3  ID            NUMBER NOT NULL primary key ,
    09:35:43   4  SFILE_NAME    VARCHAR2(200)           ,
    09:35:43   5  RFILE_NAME    VARCHAR2(200)           ,
    09:35:43   6  RSTATUS       VARCHAR2(2)             ,
    09:35:43   7  RINFO         VARCHAR2(2000)          ,
    09:35:43   8  MID           VARCHAR2(100)           ,
    09:35:43   9  CREATE_TIME         DATE                  
    09:35:43  10  );
    
    Table created.
    
    Elapsed: 00:00:00.01
    09:35:45 SYS@testdb(328)> grant select on ZKM.FILE_MS to SCOTT;
    
    Grant succeeded.
    
    Elapsed: 00:00:00.01
    09:36:08 SYS@testdb(328)> set line 500
    09:36:13 SYS@testdb(328)> select * from dba_tab_privs where grantee='SCOTT';
    
    GRANTEE                   OWNER                     TABLE_NAME                     GRANTOR                   PRIVILEGE                      GRANTABLE HIERARCHY
    ------------------------- ------------------------- ------------------------------ ------------------------- ------------------------------ --------- ---------
    SCOTT                     ZKM                       FILE_MS                        ZKM                       SELECT                         NO        NO
    
    Elapsed: 00:00:00.01

     之后改造为分区表。

    09:43:47 SYS@testdb(328)> create table ZKM.FILE_MS_TMP
    09:43:49   2  (
    09:43:49   3  ID            NUMBER NOT NULL primary key,
    09:43:49   4  SFILE_NAME    VARCHAR2(200)           ,
    09:43:49   5  RFILE_NAME    VARCHAR2(200)           ,
    09:43:49   6  RSTATUS       VARCHAR2(2)             ,
    09:43:49   7  RINFO         VARCHAR2(2000)          ,
    09:43:49   8  MID           VARCHAR2(100)           ,
    09:43:49   9  CREATE_TIME         DATE                  
    09:43:49  10  )
    09:43:49  11  PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'month')) 
    09:43:49  12  ( partition part_t01 values less than(to_date('2019-08', 'yyyy-mm')));
    
    Table created.
    
    Elapsed: 00:00:00.02
    09:43:50 SYS@testdb(328)> EXEC Dbms_Redefinition.can_redef_table('ZKM','FILE_MS');
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 00:00:00.00
    09:43:54 SYS@testdb(328)> BEGIN
    09:43:59   2  DBMS_REDEFINITION.start_redef_table(
    09:43:59   3  uname => 'ZKM', 
    09:43:59   4  orig_table => 'FILE_MS',
    09:43:59   5  int_table => 'FILE_MS_TMP');
    09:43:59   6  END;
    09:43:59   7  /
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 00:00:00.75
    09:44:00 SYS@testdb(328)> BEGIN
    09:44:03   2  dbms_redefinition.sync_interim_table(
    09:44:03   3  uname => 'ZKM', 
    09:44:03   4  orig_table => 'FILE_MS',
    09:44:03   5  int_table => 'FILE_MS_TMP');
    09:44:03   6  END;
    09:44:03   7  /
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 00:00:00.03
    09:44:03 SYS@testdb(328)> BEGIN
    09:44:07   2  dbms_redefinition.finish_redef_table(
    09:44:07   3  uname => 'ZKM',
    09:44:07   4  orig_table => 'FILE_MS',
    09:44:07   5  int_table => 'FILE_MS_TMP');
    09:44:07   6  END;
    09:44:07   7  /
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 00:00:00.32
    09:44:08 SYS@testdb(328)> select * from dba_tab_privs where grantee='SCOTT';
    
    GRANTEE                   OWNER                     TABLE_NAME                     GRANTOR                   PRIVILEGE                      GRANTABLE HIERARCHY
    ------------------------- ------------------------- ------------------------------ ------------------------- ------------------------------ --------- ---------
    SCOTT                     ZKM                       FILE_MS_TMP                    ZKM                       SELECT                         NO        NO
    
    Elapsed: 00:00:00.05

    可以看到,scott用户一开始对FILE_MS有权限,在线重定义后则转变为对FILE_MS_TMP表有查询权限。

    可以得知,对表的查询权限和索引,约束类似,转换表定义后是跟着源表来的。

    因此,需要在执行dbms_redefinition.finish_redef_table之前对用户scott授权对FILE_MS_TMP的查询权限,这样dbms_redefinition.finish_redef_table转换后FILE_MS_TMP的权限就变为FILE_MS的权限。

    正规的在线重定义过程就不给出来了,此处简略实验过程能够说明该问题就行了。

  • 相关阅读:
    CentOS 8下安装hadoop-3.3.0
    c# log4net安装时在AssemblyInfo中提示找不到log4net解决办法
    C#自定义类型数组排序
    C#中的隐藏方法
    VBA 按列查找小工具类似lookUp函数
    欢迎来到网络对抗路 实验八 Web综合
    利用GMSSL中ZUC算法实现对序列密码的结构性检测(代码)
    第二十一章学习笔记
    欢迎来到网络对抗路 实验七 网络欺诈防范
    数据转换考试qwq
  • 原文地址:https://www.cnblogs.com/PiscesCanon/p/14975500.html
Copyright © 2011-2022 走看看