1. 程式人生 > 其它 >一個普通資料庫使用者所能查到的"意料之外"的資訊(r2筆記98天)

一個普通資料庫使用者所能查到的"意料之外"的資訊(r2筆記98天)

有時候限於工作環境的情況,大多數開發人員只得到了一個許可權收到限制的資料庫使用者。 可能你都不知道你所擁有的資料庫使用者都能查到哪些你想象不到的資料庫資訊,其實你知道還是不知道,哪些東西就在那兒:) 假定現在給你一臺機器,讓你在一個已經登入的sqlplus環境下自己探索一把,在短時間內完成下面的工作,你心裡有底嗎? 得到當前的使用者名稱和所用的os賬戶名稱 得到當前的使用者建立的時間,預設的表空間是哪一個,是否是dba賬戶 檢視當前資料庫的表空間大體情況。 檢視當前資料庫的例項名稱,所在伺服器名稱和字符集 檢視以PROFILE為關鍵字的相關資料字典名稱 檢視當前資料庫是否處於歸檔模式 答案並非固定的,可以根據自己的思路來自己分析,以下是我的分析。以上問題的答案都在分析裡面。 首先,我可以使用 show user來檢視當前的使用者名稱。使用define得到一些簡單的資訊 SQL> show user

USER is "TEST" SQL> define DEFINE _DATE = "17-SEP-14" (CHAR) DEFINE _CONNECT_IDENTIFIER = "TEST01" (CHAR) DEFINE _USER = "TEST" (CHAR) DEFINE _PRIVILEGE = "" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000300" (CHAR) DEFINE _EDITOR = "ed" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000300" (CHAR)
檢視當前使用者的一些更為詳細的資訊。

  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.