ITPub博客

首页 > 数据库 > Oracle > 【SCRIPTS】将用户具有的所有权限尽收眼底

【SCRIPTS】将用户具有的所有权限尽收眼底

原创 Oracle 作者:OCMU联盟 时间:2009-11-18 17:16:03 0 删除 编辑
如何快速的在SQL*Plus中获得特定用户所具有的所有权限?
针对这个常见的问题我今天编写了一段简单脚本,供大家参考(当然您也可以在此基础上做进一步的改动,把它变成自己的一个小武器)。

1.Oracle数据库中与权限相关的视图
dba_role_privs:查看角色
dba_sys_privs :查看系统权限
dba_tab_privs :查看对象权限
dba_col_privs :查看列对象权限

2.脚本编写思想
我们使用union将以上权限相关的视图查看结果连接起来便会得到用户的所有权限。

思想有多远,我们就能走多远。脚本编写进行时……

3.脚本横空出世
经过调试,脚本内容如下。
$ cat privs.sql
set verify off
set linesize 131
col grantee for a15
col privilege for a30
col column_name for a15
col owner for a20

SELECT 'ROLE' TYPE,
       grantee,
       granted_role privilege,
       admin_option ad,
       '/' table_name,
       '/' column_name,
       '/' owner
  FROM dba_role_privs
 WHERE grantee = UPPER ('&1')
UNION
SELECT 'SYSTEM' TYPE,
       grantee,
       privilege privilege,
       admin_option ad,
       '/' table_name,
       '/' column_name,
       '/' owner
  FROM dba_sys_privs
 WHERE grantee = UPPER ('&1')
UNION
SELECT 'TABLE' TYPE,
       grantee,
       privilege privilege,
       grantable ad,
       table_name,
       '/' column_name,
       owner
  FROM dba_tab_privs
 WHERE grantee = UPPER ('&1')
UNION
SELECT 'COLUMN' TYPE,
       grantee,
       privilege privilege,
       grantable ad,
       table_name,
       column_name,
       owner
  FROM dba_col_privs
 WHERE grantee = UPPER ('&1')
ORDER BY 1
/

undefine 1
set verify on


4.脚本使用演示
最后,详细演示一下这个脚本的使用。
1)创建测试用户sec
SQL> drop user sec cascade;

User dropped.

SQL> create user sec identified by sec default tablespace TBS_SEC_D;

User created.

2)给sec用户授予connect角色
SQL> grant connect to sec;

Grant succeeded.

3)给sec用户授予对象权限
SQL> grant select on secooler.t to sec;

Grant succeeded.

4)给sec用户授予系统“select any table”权限
SQL> grant select any table to sec;

Grant succeeded.

5)授予sec用户列对象权限
SQL> grant insert(x), update(x) on secooler.t to sec;

Grant succeeded.

6)使用脚本查看一下效果,是不是感觉清晰了许多。
SQL> @privs sec

TYPE   GRANTEE  PRIVILEGE         AD  TABLE_NAME  COLUMN_NAME  OWNER
------ -------- ----------------- --- ----------- ------------ --------
COLUMN SEC      INSERT            NO  T           X            SECOOLER
COLUMN SEC      UPDATE            NO  T           X            SECOOLER
ROLE   SEC      CONNECT           NO  /           /            /
SYSTEM SEC      SELECT ANY TABLE  NO  /           /            /
TABLE  SEC      SELECT            NO  T           /            SECOOLER

上面得到的信息与我们授权内容是完全相符。

5.小结
很多常见的问题都可以使用SQL脚本来处理之,这样既可以防止出错,也可以大大的减少问题分析和处理的时间,延长DBA的生命。

Good luck.

-- The End --

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994174/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8407000