当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

如何获得某个用户对某个对象的访问权限

    与权限相关的数据字典

SQL> select * from dict where table_name like '%PRIVS' or table_name like '%ROLE%';

TABLE_NAME                                                           COMMENTS
-----------------------------------------------------------------------------------------------
ALL_TAB_PRIVS All object grants where the user or public is grantee
ALL_TAB_PRIVS_MADE All object grants made by user or on user owned objects
ALL_TAB_PRIVS_RECD All object grants to user or public
DBA_SYS_PRIVS System privileges granted to users and roles
DBA_ROLES List of all roles in the database
DBA_ROLE_PRIVS Roles granted to users and to other roles
ROLE_ROLE_PRIVS Roles granted to other roles
ROLE_SYS_PRIVS System privileges granted to roles
ROLE_TAB_PRIVS Table privileges granted to roles
SESSION_PRIVS All privileges currently available to user
SESSION_ROLES All roles currently available to user
USER_SYS_PRIVS System privileges granted to current user
USER_TAB_PRIVS Grants on objects where current user is grantee, grantor, or owner

    主要介绍***_TAB_PRIVS

DBA_TAB_PRIVS:

 Name                         Null?    Type
 ---------------------------- -------- ----------------------------
 GRANTEE                      NOT NULL VARCHAR2(30) <== Receiver of privilege
 OWNER                        NOT NULL VARCHAR2(30)
 TABLE_NAME                   NOT NULL VARCHAR2(30)
 GRANTOR                      NOT NULL VARCHAR2(30) <-- Giver of privilege
 PRIVILEGE                    NOT NULL VARCHAR2(40)
 GRANTABLE                             VARCHAR2(3) <-- Grantee has ability to grant privilege to others
    DBA_TAB_PRIVS 数据字典表纪录了所有数据库对象的授权情况,这些对象包括表,视图,存储过程等。利用这个视图可以生成数据库对象的权限脚本

    oracle数据库权限主要分为2类:对象访问权限(tables, indexes, views...)  和 系统权限(create session, create table, create user...). DBA_TAB_PRIVS  只记录 对象访问权限。

    其他相关视图:

ALL_TAB_PRIVS  All object grants where the user or public is grantee
ALL_TAB_PRIVS_MADE All object grants made by user or on user owned objects
ALL_TAB_PRIVS_RECD All object grants to user or public
DBA_SYS_PRIVS  System privileges granted to users and roles
DBA_ROLES  List of all roles in the database
DBA_ROLE_PRIVS  Roles granted to users and to other roles
ROLE_ROLE_PRIVS  Roles granted to other roles
ROLE_SYS_PRIVS  System privileges granted to roles
ROLE_TAB_PRIVS  Table privileges granted to roles
SESSION_PRIVS  All privileges currently available to user
SESSION_ROLES  All roles currently available to user
USER_SYS_PRIVS  System privileges granted to current user
USER_TAB_PRIVS  Grants on objects where current user is grantee, grantor, or owner

    获得用户的对象权限script

UT1> l
  1  select   grantee,
  2           privilege,
  3           grantable  "Adm",
  4           owner,
  5           table_name
  6  from     sys.dba_tab_privs
  7  where    grantee  =  upper('&usernm')
  8* order by grantee, owner, table_name, privilege

  GRANTEE      PRIVILEGE  Adm OWNER        TABLE_NAME
  ------------ ---------- --- ------------ -------------------------
  SEFIN        DELETE     NO  SYSTEM       SRW_FIELD
               INSERT     NO  SYSTEM       SRW_FIELD
               SELECT     NO  SYSTEM       SRW_FIELD
               UPDATE     NO  SYSTEM       SRW_FIELD

 set echo off
 rem
 rem  19980729  M D Powell   New script.
 rem
 set verify off
 set pagesize 0
 set feedback off
 spool grt_&&owner._&&table_name..sql

 select 'REM  grants on &&owner..&&table_name'
 from sys.dual ;

 select 'grant '||privilege||' on '||lower(owner)||'.'||
         lower(table_name)||' to '||grantee||
         decode(grantable,'YES',' with grant option',NULL)||
         ' ;'
 from   sys.dba_tab_privs
 where  owner      = upper('&&owner')
 and    table_name = upper('&&table_name')
 order by grantee, privilege ;

 spool off
 undefine owner
 undefine table_name Sample output:

 grant INDEX on jit.wo_master to EDSJIT ;
 grant INSERT on jit.wo_master to EDSJIT with grant option ;
 grant REFERENCES on jit.wo_master to EDSJIT ;
 grant SELECT on jit.wo_master to EDSJIT with grant option ;
 
    当在开发数据库上丢失了对象权限的时候,可以在产品数据库上运行该script获得丢失的授权脚本。 

相关内容
赞助商链接