一個普通資料庫使用者所能查到的"意料之外"的資訊(r2筆記98天)
有時候限於工作環境的情況,大多數開發人員只得到了一個許可權收到限制的資料庫使用者。
可能你都不知道你所擁有的資料庫使用者都能查到哪些你想象不到的資料庫資訊,其實你知道還是不知道,哪些東西就在那兒:)
假定現在給你一臺機器,讓你在一個已經登入的sqlplus環境下自己探索一把,在短時間內完成下面的工作,你心裡有底嗎?
得到當前的使用者名稱和所用的os賬戶名稱
得到當前的使用者建立的時間,預設的表空間是哪一個,是否是dba賬戶
檢視當前資料庫的表空間大體情況。
檢視當前資料庫的例項名稱,所在伺服器名稱和字符集
檢視以PROFILE為關鍵字的相關資料字典名稱
檢視當前資料庫是否處於歸檔模式
答案並非固定的,可以根據自己的思路來自己分析,以下是我的分析。以上問題的答案都在分析裡面。
首先,我可以使用 show user來檢視當前的使用者名稱。使用define得到一些簡單的資訊
SQL> show user
1* select *from user_users SQL> / USERNAME USER_ID ACCOUNT_ST LOCK_DATE EXPIRY_DA DEFAULT_TA TEMPORARY_TABLESPACE CREATED INITIAL_RSRC_CONSUMER_GROUP EXTERNAL_NAME ---------- ---------- ---------- --------- --------- ---------- ------------------------------ --------- ------------------------------ ------------------------------ TEST 280 OPEN 16-MAR-15 SYSTEM TEMPTS1 17-SEP-14 DEFAULT_CONSUMER_GROUP
然後使用下面的sql來檢視當前的資料庫例項的一些資訊。
col isdba format a10
col language format a25
col current_user format a15
col os_user format a15
col host format a15
col ip_address format a15
col db_name format a15
檢視資料庫的全域性名。
SQL> select *from global_name;
GLOBAL_NAME
----------------------------------------------------------------------------------------------------
TEST01
得到一些更為詳盡的資訊
SQL> select SYS_CONTEXT('USERENV','ISDBA') isdba,SYS_CONTEXT('USERENV','LANGUAGE') language,SYS_CONTEXT('USERENV','CURRENT_USER') current_user,SYS_CONTEXT('USERENV','DB_NAME') db_name,SYS_CONTEXT('USERENV','HOST') host,SYS_CONTEXT('USERENV','OS_USER') os_user,SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address from dual
/
ISDBA LANGUAGE CURRENT_USER DB_NAME HOST OS_USER IP_ADDRESS
---------- ------------------------- --------------- --------------- --------------- --------------- ---------------
FALSE AMERICAN_AMERICA.AL32UTF8 TEST TEST01 rac1 ora11g
當前使用者所擁有的許可權。
SQL> select *from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
當前使用者下的物件情況。
SQL> select *from cat;
no rows selected
雖然當前的使用者下沒有任何表和其他資料庫物件,但是你還能查到一些其他的資訊。使用all_objects
PRODUCT_PRIVS SYSTEM PRODUCT_PROFILE PUBLIC
OBJECT_NAME OWNER ------------------------------ ------------------------------ PRODUCT_USER_PROFILE PUBLIC
5656 rows selected.
SQL> l
1* select object_name,owner from all_objects
檢視當前資料庫中所有的使用者。
select object_name,owner from all_users
.....
TEST2 33 31-JAN-14
APPQOSSYS 31 23-JAN-14
DBSNMP 30 23-JAN-14
ORACLE_OCM 21 23-JAN-14
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
PRDCONN 264 03-JUN-14
DIP 14 23-JAN-14
OUTLN 9 23-JAN-14
SYSTEM 5 23-JAN-14
SYS 0 23-JAN-14
27 rows selected.
檢視能不能訪問到一些其他的資料字典表。
SQL> select owner,object_name from all_objects where object_name like '%INSTANCE';
OWNER OBJECT_NAME
------------------------------ ------------------------------
SYS EXU81PROCOBJINSTANCE
PUBLIC V$INSTANCE
PUBLIC GV$INSTANCE
PUBLIC DBA_HIST_DATABASE_INSTANCE
SQL> desc V$INSTANCE
ERROR:
ORA-04043: object "SYS"."V_$INSTANCE" does not exist
查看錶空間的資訊。
SQL> select tablespace_name from user_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS
TEMPTS1
TEST_DATA1
POOL_DATA
通過dict能夠查到所有你知道不知道的資料字典名稱。
SQL> desc dict
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
TABLE_NAME VARCHAR2(30)
COMMENTS VARCHAR2(4000)
檢視當前的一些session情況。
1* select machine ,osuser,username ,program from v$session
SQL> /
MACHINE OSUSER USERNAME PROGRAM
-------------------- ------------------------------ ---------- ------------------------------------------------
rac1 ora11g oracle@rac1 (PMON)
rac1 ora11g oracle@rac1 (VKTM)
rac1 ora11g oracle@rac1 (DIAG)
rac1 ora11g oracle@rac1 (DIA0)
rac1 ora11g oracle@rac1 (DBW0)
rac1 ora11g oracle@rac1 (CKPT)
rac1 ora11g oracle@rac1 (RECO)
rac1 ora11g oracle@rac1 (MMNL)
rac1 ora11g oracle@rac1 (ARC0)
rac1 ora11g oracle@rac1 (ARC2)
rac1 ora11g oracle@rac1 (QMNC)
MACHINE OSUSER USERNAME PROGRAM
-------------------- ------------------------------ ---------- ------------------------------------------------
rac1 ora11g oracle@rac1 (Q002)
rac1 ora11g N1 sqlplus@rac1 (TNS V1-V3)
rac1 ora11g oracle@rac1 (W000)
rac1 ora11g oracle@rac1 (SMCO)
rac1 ora11g oracle@rac1 (PSP0)
rac1 ora11g oracle@rac1 (GEN0)
rac1 ora11g oracle@rac1 (DBRM)
rac1 ora11g oracle@rac1 (MMAN)
rac1 ora11g oracle@rac1 (LGWR)
rac1 ora11g oracle@rac1 (SMON)
rac1 ora11g oracle@rac1 (MMON)
MACHINE OSUSER USERNAME PROGRAM
-------------------- ------------------------------ ---------- ------------------------------------------------
rac1 ora11g oracle@rac1 (ARC1)
rac1 ora11g oracle@rac1 (ARC3)
rac1 ora11g oracle@rac1 (Q001)
rac1 ora11g TEST sqlplus@rac1 (TNS V1-V3)
26 rows selected.
最後一個問題拋磚引玉,怎麼檢視資料庫是否處於歸檔狀態。一般命令archive log list連普通dba都沒許可權檢視。dba倒是可以根據其他的資料字典來檢視。普通使用者也能完成。
答案就是:
MACHINE OSUSER USERNAME PROGRAM
-------------------- ------------------------------ ---------- ------------------------------------------------
rac1 ora11g oracle@rac1 (ARC1)
rac1 ora11g oracle@rac1 (ARC3)
rac1 ora11g oracle@rac1 (Q001)
rac1 ora11g TEST sqlplus@rac1 (TNS V1-V3)
26 rows selected.