Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> Re: Table access
Tracy Rahmlow wrote:
>
> I am looking for a script that I can supply a table name and it
> returns all users that have access to it (either directly, thru system
> priveleges or thru roles) and what the access is. Does anybody have
> something like this that I can use? Thanks
>
> American Express made the following
> annotations on 01/13/2004 08:16:14 AM
> ------------------------------------------------------------------------------
> ******************************************************************************
>
> "This message and any attachments are solely for the intended
> recipient and may contain confidential or privileged information. If
> you are not the intended recipient, any disclosure, copying, use, or
> distribution of the information included in this message and any
> attachments is prohibited. If you have received this communication in
> error, please notify us by reply e-mail and immediately and
> permanently delete this message and any attachments. Thank you."
>
> ******************************************************************************
>
> ==============================================================================
Not exactly what you request, but pretty close ...
rem
rem whocan.sql rem rem Copyright (C) Oriole Software, 2003 rem rem Downloaded from http://www.oriolecorp.com rem rem This script for Oracle database administration is free software; you rem can redistribute it and/or modify it under the terms of the GNU General rem Public License as published by the Free Software Foundation; either rem version 2 of the License, or any later version. rem rem This script is distributed in the hope that it will be useful, rem but WITHOUT ANY WARRANTY; without even the implied warranty of rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the rem GNU General Public License for more details. rem rem You should have received a copy of the GNU General Public License rem along with this program; if not, write to the Free Software rem Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.rem
-- -- This scripts allows you to check who can either SEE (i.e. SELECT from) -- or MODIFY (INSERT, UPDATE or DELETE) a given table or view. -- This is fairly easy to check when the right was directly granted, much -- less when rights are inherited through roles. -- -- Check your sensitive data ... -- -- Usage : @whocan SEE|MODIFY [owner.]tablename -- -- Example : @whocan see scott.emp -- -- No row returned means that the object doesn't exist (SYS and SYSTEM -- could otherwise access it). If no owner is specified, it defaults -- to the current schema. -- -- For DBAs only, as usual. -- -- ------------------------------------------------------------------------- -- set verify off select u.name "USERNAME" from sys.user$ u where u.type# = 1 and (exists (select null from sys.sysauth$ where privilege# in (select privilege from sys.system_privilege_map where (upper('&1') = 'SEE' and name = 'SELECT ANY TABLE') or (upper('&1') = 'MODIFY' and name in ('INSERT ANY TABLE', 'UPDATE ANY TABLE', 'DELETE ANY TABLE'))) connect by grantee# = prior privilege# start with grantee# = u.user# union all select null from sys.objauth$ where privilege# in (select privilege from sys.table_privilege_map where (upper('&1') = 'SEE' and name = 'SELECT') or (upper('&1') = 'MODIFY' and name in ('INSERT', 'UPDATE', 'DELETE'))) and obj# = (select o.obj# from sys.obj$ o, sys.user$ u where o.owner# = u.user# and u.name = decode(instr('&2', '.'), 0, sys_context('USERENV', 'CURRENT_SCHEMA'), upper(substr('&2', 1, instr('&2','.')-1))) and o.name = decode(instr('&2', '.'), 0, upper('&2'), upper(substr('&2', instr('&2','.')+1)))) and grantee# in (select 1 from dual union all select privilege# from sys.sysauth$ connect by grantee# = prior privilege# start with grantee# = u.user# union select u.user# from dual)) or u.name = decode(instr('&2', '.'), 0, sys_context('USERENV', 'CURRENT_SCHEMA'), upper(substr('&2', 1, instr('&2','.')-1)))) -- Check that the object exists ! and exists (select null from sys.obj$ o, sys.user$ u where o.owner# = u.user# and u.name = decode(instr('&2', '.'), 0, sys_context('USERENV', 'CURRENT_SCHEMA'), upper(substr('&2', 1, instr('&2','.')-1))) and o.name = decode(instr('&2', '.'), 0, upper('&2'), upper(substr('&2', instr('&2','.')+1)))) / -- Please see the official ORACLE-L FAQ: http://www.orafaq.net -- Author: Stephane Faroult INET: sfaroult_at_oriole.com Fat City Network Services -- 858-538-5051 http://www.fatcity.com San Diego, California -- Mailing list and web hosting services --------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).Received on Tue Jan 13 2004 - 16:14:42 CST
![]() |
![]() |