限制SQLPLUS工具可執行的命令
Oracle除了提供資料庫級的各種許可權來控制安全以外,對於SQLPLUS工具而言,還提供了特殊的控制方法。
一般資料庫建立的時候,DBCA都會自動在SYSTEM使用者下載入$ORACLE_HOME/sqlplus/admin/pupbld.sql指令碼,來建立SQLPLUS_PRODUCT_PROFILE表,如果這個表沒有建立,則在普通使用者登陸時候會出現告警。關於這個錯誤可以參考:http://yangtingkun.itpub.net/post/468/488833
這個表可以限制除SYS、SYSTEM以及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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TortoiseSVN 命令 (命令列執行工具)命令列
- Linux下Oracle sqlplus命令中執行ed命令LinuxOracleSQL
- 在sqlplus執行作業系統命令SQL作業系統
- SQLPLUS 下輸入命令的字元長度限制SQL字元
- 利用java實現可遠端執行linux命令的小工具JavaLinux
- SQLPLUS檢視oracle sql執行計劃命令SQLOracle
- cmd執行命令時:不是內部或外部命令,也不是可執行的程式
- 編譯Android下可執行命令的FFmpeg編譯Android
- 可執行命令——全文索引參考索引
- sqlplus & rman 命令下,使用上下翻動鍵,呼叫之前執行過的命令SQL
- 漏掃工具AWVS命令執行
- 限制軟體執行的方法
- 10.2.0.1版本上sqlplus命令不能執行的問題解決SQL
- sqlplus小竅門:執行作業系統命令(zt)SQL作業系統
- 9i並行執行的限制並行
- 王鼎杯 RCE命令執行 五位元組限制
- SQLPLUS執行輸出SQL
- Windows命令遠端執行工具WinexeWindows
- 執行sqlplus遭遇Segmentation FaultSQLSegmentation
- Parker 輕量級打包工具與容器執行時,一條命令將 php 指令碼打包成可執行檔案PHP指令碼
- 虛驚一場(使用工具執行命令的後果)
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 如何執行maven和執行maven的命令。Maven
- ‘cnpm' 不是內部或外部命令,也不是可執行的程式NPM
- 'findstr' 不是內部或外部命令,也不是可執行的程式
- linux 下root執行sqlplusLinuxSQL
- SQLPLUS的ACCEPT命令SQL
- SQLPLUS 的COPY命令SQL
- sqlplus下的命令SQL
- CMD執行提示:不是內部或外部命令,也不是可執行的批處理檔案
- LINUX下使用指令碼直接執行SQLPLUS命令(root使用者下)Linux指令碼SQL
- Laravel 佇列執行頻率限制Laravel佇列
- Linux執行緒(程式)數限制Linux執行緒
- Android Oreo 後臺執行限制Android
- 使用sqlplus批量執行指令碼的總結SQL指令碼
- 收集 Linux 命令列執行的命令Linux命令列
- ClusterShell:一個在叢集節點上並行執行命令的好工具並行
- 'ping' 不是內部或外部命令,也不是可執行的程式