zoukankan      html  css  js  c++  java
  • gen_grant_sel.sql

    set echo off feedback off verify off pagesize 0 linesize 120

    define v_grantee=&1

    define v_grant_sel_command_file = .loggrant_sel_&v_grantee..sql
    define v_grant_sel_log_file     = .loggrant_sel_&v_grantee..log


    spool &v_grant_sel_command_file.
    prompt spool &v_grant_sel_log_file.
    prompt set echo on feedback on
    prompt show user

    ----将原有的权限赋予用户,no exsists ( select null于(select *)差不多)  就是where如果子查询没有返回行,则----则满足 NOT EXISTS 中的 ----WHERE 子句,目的应该是检查是否表的权限是否有丢失。

    ----按照每个表的权限进行遍历

    --- &v_grantee 是request , 执行者是 data owner.


    select
      'grant select on ' || t.table_name || ' to &v_grantee with grant option;'
    from     user_tables t
    where not exists
      (select null
       from   user_tab_privs p
       where  p.owner      = user
       and    p.table_name = t.table_name
       and    p.grantee    = upper('&v_grantee'))
    and user != upper('&v_grantee')
    order by t.table_name
    /

    --

    select
      'grant select on ' || v.view_name  || ' to &v_grantee with grant option;'
    from     user_views v
    where not exists
      (select null
       from   user_tab_privs p
       where  p.owner      = user
       and    p.table_name = v.view_name
       and    p.grantee    = upper('&v_grantee'))
    and user != upper('&v_grantee')
    order by v.view_name
    /
    select
      'grant execute on ' || o.object_name || ' to &v_grantee;'
    from     user_objects o
    where object_type in ('PACKAGE')
    and   not exists
      (select null
       from   user_tab_privs p
       where  p.owner      = user
       and    p.table_name = o.object_name
       and    p.grantee    = upper('&v_grantee'))
    and user != upper('&v_grantee')
    order by o.object_name
    /

    prompt set echo off feedback off
    prompt spool off
    spool off

    @&v_grant_sel_command_file.

    补充测试说明:

    data user: for ddl usr 

    user: for app dml/select (同义词)

    patch user: for app supprot user (同义词)

    query    : for app supprot user   (同义词)  

    ##

    step 1:

    检查  data user的表是否给了权限usr user.

    变量为: dbUSR

    select *    from   user_tab_privs p    where  p.owner      = user    and    p.grantee    = upper('&v_grantee'))    and user != upper('&v_grantee')

    step 2.1: 测试取消data user 的表的update/select权限 

    revoke update on testfrom dbUSR; revoke  select  on testfrom dbUSR;

    step 3.1: 测试脚本01_schema_rollout.sql能否将的表的update/select权限 重新授权

    测试01_schema_rollout.sql 结果:无法将2个权限 重新授权

    step 2.2: 测试取消data user 的表的delete/insert权限 

    revoke insert on testfrom dbUSR;

    revoke delete on testfrom dbUSR;

    step 3.2: 测试脚本能否将的表的delete/insert/update/select权限 重新授权

    测试01_schema_rollout.sql 结果:可以

      step  2.3 删除一个表。然后使用备份表(.sql)文件恢复,是可行的。(.sql 文件包含授权grant命令 )

    step 3.3 同义词 状态是invalide,可以忽略。

    原因如下: 先建一个可用的同义词,然后将该同义词对应的表删除,dba_objects对应的状态就是INVALID了  然后当你再去select这个同义词的时候,status又会变成VALID.

  • 相关阅读:
    杭电2050
    杭电2043,小细节。。。。。
    杭电2034,坑爹的人见人爱a-b
    杭电2035--人见人爱A^B
    杭电2032--杨辉三角
    杭电2029--Palindromes _easy version(回文串)
    杭电2028--Lowest Common Multiple Plus
    NPOI大数据分批写入同个Excel
    [每日一题] OCP1z0-047 :2013-07-25 权限――角色与对象权限
    Ubuntu下安装搜狗拼音输入法
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/5897000.html
Copyright © 2011-2022 走看看