如何快速的在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/
,如需转载,请注明出处,否则将追究法律责任。