itpub網友問題--如何讓某資料庫使用者不能查詢all_users
ITPUB網友問題:
http://www.itpub.net/thread-1941574-1-1.html使用如下命令新建立一個使用者,怎麼限制這個使用者不能檢視 all_users這張表?
-- Create the user
create user TEST1
default tablespace USERS
temporary tablespace TEMP;
-- Grant/Revoke role privileges
grant connect to TEST1;
結論
1,直接以syssdba執行如下命令revoke select on all_users from public;
從public回收對於select on all_users的許可權即可
2,分析思路:
A,獲取all_users的底層DDL基表定義,嘗試找到線索,未果
B,查詢dba_objects找到all_users隸屬何種物件,嘗試找到線索,未果
C,以all_users為關鍵詞,在dba_tab_privs找到授予此表以及接受此表許可權的資訊
SQL> select grantor,grantee,table_schema,table_name from all_tab_privs where table_name='ALL_USERS';
GRANTOR GRANTEE TABLE_SCHEMA TABLE_NAME
-------------------- -------------------- -------------------- ------------------------------------------------------------
SYS PUBLIC SYS ALL_USERS
SYS APEX_030200 SYS ALL_USERS
D, 基於C的情況,回收許可權
SQL> revoke select on all_users from public;
Revoke succeeded.
E,驗證此回收許可權不會對於其它資料庫使用者造成影響
F,要理解PUBLIC這個角色的含義
測試:
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> create user test1 default tablespace users temporary tablespace temp identified by system;
User created.
SQL> grant connect to test1;
Grant succeeded.
SQL> conn test1/system
Connected.
SQL> select count(*) from all_users;
COUNT(*)
----------
31
SQL> set long 99999999
SQL> set pagesize 300
SQL> select view_name,text from dba_views where view_name='ALL_USERS';
VIEW_NAME
------------------------------------------------------------
TEXT
--------------------------------------------------------------------------------
ALL_USERS
select u.name, u.user#, u.ctime
from sys.user$ u, sys.ts$ dts, sys.ts$ tts
where u.datats# = dts.ts#
and u.tempts# = tts.ts#
and u.type# = 1
SQL> show user
USER is "SYS"
SQL> select distinct type# from user$ order by 1;
TYPE#
----------
0
1
可見type#=0是資料庫的角色
SQL> select user#,name,type# from user$ where name not in (select username from dba_users) order by 1;
USER# NAME TYPE#
---------- ------------------------------------------------------------ ----------
1 PUBLIC 0
2 CONNECT 0
3 RESOURCE 0
4 DBA 0
6 SELECT_CATALOG_ROLE 0
7 EXECUTE_CATALOG_ROLE 0
8 DELETE_CATALOG_ROLE 0
10 EXP_FULL_DATABASE 0
11 IMP_FULL_DATABASE 0
12 LOGSTDBY_ADMINISTRATOR 0
13 DBFS_ROLE 0
15 AQ_ADMINISTRATOR_ROLE 0
16 AQ_USER_ROLE 0
17 DATAPUMP_EXP_FULL_DATABASE 0
18 DATAPUMP_IMP_FULL_DATABASE 0
19 ADM_PARALLEL_EXECUTE_TASK 0
20 GATHER_SYSTEM_STATISTICS 0
22 RECOVERY_CATALOG_OWNER 0
23 SCHEDULER_ADMIN 0
24 HS_ADMIN_SELECT_ROLE 0
25 HS_ADMIN_EXECUTE_ROLE 0
26 HS_ADMIN_ROLE 0
27 GLOBAL_AQ_USER_ROLE 0
28 OEM_ADVISOR 0
29 OEM_MONITOR 0
33 WM_ADMIN_ROLE 0
34 JAVAUSERPRIV 0
35 JAVAIDPRIV 0
36 JAVASYSPRIV 0
37 JAVADEBUGPRIV 0
38 EJBCLIENT 0
39 JMXSERVER 0
40 JAVA_ADMIN 0
41 JAVA_DEPLOY 0
44 CTXAPP 0
47 XDBADMIN 0
48 XDB_SET_INVOKER 0
49 AUTHENTICATEDUSER 0
50 XDB_WEBSERVICES 0
51 XDB_WEBSERVICES_WITH_PUBLIC 0
52 XDB_WEBSERVICES_OVER_HTTP 0
58 ORDADMIN 0
59 OLAPI_TRACE_USER 0
60 OLAP_XS_ADMIN 0
62 OLAP_DBA 0
63 CWM_USER 0
64 OLAP_USER 0
66 SPATIAL_WFS_ADMIN 0
68 WFS_USR_ROLE 0
69 SPATIAL_CSW_ADMIN 0
71 CSW_USR_ROLE 0
73 MGMT_USER 0
77 APEX_ADMINISTRATOR_ROLE 0
80 OWB$CLIENT 0
81 OWB_DESIGNCENTER_VIEW 0
82 OWB_USER 0
88 _NEXT_USER 0
57 rows selected.
SQL>
SQL> select user_id,username from all_users order by 1;
USER_ID USERNAME
---------- ------------------------------------------------------------
0 SYS
5 SYSTEM
9 OUTLN
14 DIP
21 ORACLE_OCM
30 DBSNMP
31 APPQOSSYS
32 WMSYS
42 EXFSYS
43 CTXSYS
45 XDB
46 ANONYMOUS
53 ORDSYS
54 ORDDATA
55 ORDPLUGINS
56 SI_INFORMTN_SCHEMA
57 MDSYS
61 OLAPSYS
65 MDDATA
67 SPATIAL_WFS_ADMIN_USR
70 SPATIAL_CSW_ADMIN_USR
72 SYSMAN
74 MGMT_VIEW
75 FLOWS_FILES
76 APEX_PUBLIC_USER
78 APEX_030200
79 OWBSYS
83 OWBSYS_AUDIT
84 SCOTT
87 TEST1
2147483638 XS$NULL
31 rows selected.
SQL> select object_name,object_type from dba_objects where object_name='ALL_USERS';
OBJECT_NAME OBJECT_TYPE
-------------------------------------------------- --------------------------------------
ALL_USERS VIEW
ALL_USERS SYNONYM
SQL> select grantor,grantee,table_schema,table_name from all_tab_privs where table_name='ALL_USERS';
GRANTOR GRANTEE TABLE_SCHEMA TABLE_NAME
-------------------- -------------------- -------------------- ------------------------------------------------------------
SYS PUBLIC SYS ALL_USERS
SYS APEX_030200 SYS ALL_USERS
SQL> revoke select on all_users from public;
Revoke succeeded.
SQL> conn test1/system
Connected.
SQL> select count(*) from all_users;
select count(*) from all_users
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select count(*) from user_users;
COUNT(*)
----------
1
SQL> select count(*) from all_tables;
COUNT(*)
----------
99
SQL> select count(*) from user_jobs;
COUNT(*)
----------
0
SQL> conn scott/system
Connected.
SQL> select count(*) from all_users;
COUNT(*)
----------
31
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1823835/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 併發查詢資料庫問題資料庫
- BIEB六人行:網友給出小李的資料庫查詢慢的可能問題資料庫
- 查詢某資料庫中所有的欄位資料庫
- SQLSERVER查詢某個資料庫有幾張表SQLServer資料庫
- 資料庫分組查詢最大值的問題資料庫
- 關於下拉選單查詢資料庫的問題資料庫
- itpub網友問題之AL32UTF8與ZHS16GBK 2種資料庫字符集database characterset資料庫Database
- 分庫資料如何查詢統計
- 如何查詢某個資料表中除某個欄位的所有資訊???
- 資料庫查詢資料庫
- 資料庫 - 資料查詢資料庫
- 資料庫資料的查詢----連線查詢資料庫
- 海量資料的查詢快取問題快取
- 查詢RMAN資料庫——RMAN使用者手冊資料庫
- 記一次資料庫查詢超時優化問題資料庫優化
- SQL2008查詢某資料庫中的某個值是否存在SQL資料庫
- 資料庫高階查詢之子查詢資料庫
- 求助:資料庫查詢資料庫
- ThinkPHP 資料庫查詢PHP資料庫
- 查詢資料庫大小資料庫
- 資料庫排序查詢資料庫排序
- Jemter查詢資料庫資料庫
- 資料庫高io問題調查資料庫
- 千萬級資料庫使用索引查詢速度更慢的疑惑-資料回表問題資料庫索引
- 如何查詢SAP Fiori UI上某個欄位對應的底層資料庫表UI資料庫
- 某Q友的問題--如何讓sqlplus spool產生的日誌附加sysdate日期資訊-shellSQL
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- 查詢資料庫後是返回ResultSet實現中遇到的問題資料庫
- 資料庫 - 連線查詢、巢狀查詢、集合查詢資料庫巢狀
- 查詢資料庫中的所有的普通使用者資料庫
- 網友遇到的問題---資料被莫名的刪除
- 海量資料查詢問題--簡單的理解
- 某資料庫的節點4因網路問題,主機關閉資料庫
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- 資料庫基礎查詢--單表查詢資料庫
- 資料庫查詢優化:巢狀查詢資料庫優化巢狀
- 如何使用Java Streams進行資料庫查詢?Java資料庫
- 如何查詢和管理織夢CMS資料庫資料庫