限制SQLPLUS工具可執行的命令

yangtingkun發表於2009-08-05

Oracle除了提供資料庫級的各種許可權來控制安全以外,對於SQLPLUS工具而言,還提供了特殊的控制方法。

 

 

一般資料庫建立的時候,DBCA都會自動在SYSTEM使用者下載入$ORACLE_HOME/sqlplus/admin/pupbld.sql指令碼,來建立SQLPLUS_PRODUCT_PROFILE表,如果這個表沒有建立,則在普通使用者登陸時候會出現告警。關於這個錯誤可以參考:http://yangtingkun.itpub.net/post/468/488833

這個表可以限制除SYSSYSTEM以及SYSDBA/SYSOPER身份登陸以外的所有普通使用者。透過這個表可以限制絕大部分的SQLPLUS命令、SQL命令和PL/SQL命令。

一個簡單的例子:

SQL> CONN SYSTEM
請輸入口令
已連線。
SQL> DESC SQLPLUS_PRODUCT_PROFILE
 
名稱                                      是否為空? 型別
 ----------------------------------------- -------- ----------------------------
 PRODUCT                                   NOT NULL VARCHAR2(30)
 USERID                                             VARCHAR2(30)
 ATTRIBUTE                                          VARCHAR2(240)
 SCOPE                                              VARCHAR2(240)
 NUMERIC_VALUE                                      NUMBER(15,2)
 CHAR_VALUE                                         VARCHAR2(240)
 DATE_VALUE                                         DATE
 LONG_VALUE                                         LONG

SQL> INSERT INTO SQLPLUS_PRODUCT_PROFILE
  2  VALUES ('SQL*Plus', 'U1', 'DROP', NULL, NULL, 'DISABLED', NULL, NULL);

已建立 1 行。

SQL> COMMIT;

提交完成。

SQL> CONN U1/U1
已連線。
SQL> SELECT * FROM TAB;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
T                              TABLE

SQL> DROP TABLE T;
SP2-0544:
無效的命令: drop

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE    9.2.0.3.0       Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

由於SQLPLUS_PRODUCT_PROFILE表只是專門針對SQLPLUS工具的,因此對於PRODUCT列需要輸入‘SQL*Plus’USERID列輸入需要限制的使用者名稱,如果輸入萬用字元‘%’,則對所有使用者生效。ATTRIBUTE輸入限制的命令,這裡限制的是DROP命令。CHAR_VALUE必須輸入‘DISABLED’,而其餘的列目前沒有使用,輸入NULL

可以看到,在9i中錯誤資訊很不明確,使用者如果碰到這個錯誤,根本不清楚到底是什麼原因導致了命令的失敗。

而在10g中,錯誤資訊就清晰多了:

SQL> conn / as sysdba
Connected.
SQL> insert into system.sqlplus_product_profile
  2  values ('SQL*Plus', '%', 'SELECT', null, null, 'DISABLED', null, null);

1 row created.

SQL> commit;

Commit complete.

SQL> conn u1/u1
Connected.
SQL> select * from tab;
SP2-0544: Command "select" disabled in Product User Profile
SQL> conn / as sysdba
Connected.
SQL> delete system.sqlplus_product_profile;

1 rows deleted.

SQL> commit;

Commit complete.

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-611457/,如需轉載,請註明出處,否則將追究法律責任。

相關文章