限制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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編譯Android下可執行命令的FFmpeg編譯Android
- 漏掃工具AWVS命令執行
- sqlplus執行sql檔案報錯SQL
- 王鼎杯 RCE命令執行 五位元組限制
- oracle系列(一)sqlplus命令OracleSQL
- Parker 輕量級打包工具與容器執行時,一條命令將 php 指令碼打包成可執行檔案PHP指令碼
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 收集 Linux 命令列執行的命令Linux命令列
- oracle sqlplus 常用命令OracleSQL
- ‘cnpm' 不是內部或外部命令,也不是可執行的程式NPM
- Linux 中顯示可執行檔案的路徑 | 哪個命令Linux
- Web Worker執行緒的限制是什麼?Web執行緒
- Laravel 佇列執行頻率限制Laravel佇列
- ClusterShell:一個在叢集節點上並行執行命令的好工具並行
- 命令執行漏洞
- Docker執行命令Docker
- sqlplus執行指令碼時遇到錯誤自動停止SQL指令碼
- .net使用Task多執行緒執行任務 .net限制執行緒數量執行緒
- Golang 使用執行命令帶管道符執行的方法Golang
- Redis 命令的執行過程Redis
- sqlplus和sqlldr工具安裝SQL
- pytorch中’tensorboard‘不是內部或外部命令,也不是可執行的程式PyTorchORB
- [20190126]從sqlplus執行結果返回bash shell變數.txtSQL變數
- .net執行cmd命令
- Java執行cmd命令Java
- 執行 kratos 一直沒這個命令,提示 'kratos' 不是內部或外部命令,也不是可執行的程式,需要配置go-binGo
- 瞭解可執行的NPM包NPM
- IDEA打可執行的jar包IdeaJAR
- Java編譯和執行的命令Java編譯
- conda不是內部或外部命令,也不是可執行的程式解決方案
- Go的執行原理以及Go的命令Go
- Couchdb-許可權繞過--命令執行--(CVE-2017-12635)&&(CVE-2017-12636)--H2database命令執行--(CVE-2022-23221)Database
- gsql是openGauss提供在命令列下執行的資料庫連線工具SQL命令列資料庫
- python面試題之python下多執行緒的限制Python面試題執行緒
- python裡執行shell命令或cmd命令Python
- 【Mongo】shell命令列模式執行mongo命令Go命令列模式
- Oracle WebLogic 曝 0day 漏洞,攻擊者可遠端執行命令OracleWeb
- 監控 redis 執行命令Redis
- Linux 後臺執行命令Linux