天天看點

一個普通資料庫使用者所能查到的"意料之外"的資訊

有時候限于工作環境的情況,大多數開發人員隻得到了一個權限收到限制的資料庫使用者。

可能你都不知道你所擁有的資料庫使用者都能查到哪些你想象不到的資料庫資訊,其實你知道還是不知道,哪些東西就在那兒:)

假定現在給你一台機器,讓你在一個已經登入的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

MACHINE              OSUSER                         USERNAME   PROGRAM

-------------------- ------------------------------ ---------- ------------------------------------------------

26 rows selected.

最後一個問題抛磚引玉,怎麼檢視資料庫是否處于歸檔狀态。一般指令archive log list連普通dba都沒權限檢視。dba倒是可以根據其他的資料字典來檢視。普通使用者也能完成。

答案就是: