SQL*Plus安全(一)
SQL*Plus是目前Oracle開發、管理人員最常用的開發管理工具。雖然Oracle在10g、11g新版本中,提供了諸多視覺化管理工具,來簡化Oracle資料庫管理和使用,但是SQL*Plus在多種平臺上仍佔有不可替代的地位。
安全問題是資料庫管理系統的一個重點。對資料進行有效的許可權控制管理,是保護資料完整性的一種手段。我們通常熟悉的安全性方法,是藉助grant和revoke許可權控制語句,將Oracle相關許可權附加到某個特定的使用者或者角色(使用者集合)。我們稱這種安全控制附加在使用者級別的技術,為user-level security(基於使用者安全技術)。
但是,在某些時候,這種許可權控制方式是存在一些漏洞的。比較明顯的就是Grant、Revoke和Set Role等命令,這些命令可以動態的將使用者資料庫訪問許可權(物件許可權、角色許可權和系統許可權)進行修改。所以,Oracle針對這種問題,提供了程式級別(Product-Level Security)的安全配置,作為User-Level Security的一種補充。
SQL*PLUS與PUP
Product-Level Security技術的基礎是基於名為Product_User_Profile(以下簡稱為PUP)的資料表。這個資料表是在System使用者的Schema下,通常隨著資料庫的建立而一同生成。
SQL> conn system/system@orcl;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> desc product_user_profile;
Name Type Nullable Default Comments
------------- ------------- -------- ------- --------
PRODUCT VARCHAR2(30)
USERID VARCHAR2(30) Y
ATTRIBUTE VARCHAR2(240) Y
SCOPE VARCHAR2(240) Y
NUMERIC_VALUE NUMBER(15,2) Y
CHAR_VALUE VARCHAR2(240) Y
DATE_VALUE DATE Y
LONG_VALUE LONG Y
SQL>
說明,如果這個資料表不存在,可以手工的執行指令碼pupbld.sql,但要注意是使用system使用者登入執行。一般這個指令碼位置在$ORACLE_HOME/sqlplus/admin目錄下。
PUP的含義就是一組定義規則。定義了某個使用者(USERID)在使用某種產品(PRODUCT)的使用,允許執行什麼命令和不允許使用什麼命令。就SQL*PLUS而言,在使用者登入的時候,SQL*PLUS會自動的讀取PUP資料表的配置項。
注意:這裡面有一個技術細節!就是使用配置項的獲取點,是在使用者login入系統的時候。也就是說如果我們設定了一個新的許可權規則,使用者只有重新登入入產品才能應用最新的許可權規則。
PUP使用
PUP資料表的結構中,每行就是一個規則專案。規定了使用某項產品的時候,某個使用者使用的許可權。下面是各列的含義和取值(部分參考Oracle官方文件:SQL*PLUS user guide)。
PUP列 |
列資訊描述 |
備註 |
PRODUCT |
必填專案,應用產品的名稱。不允許為空; |
對SQLPLUS使用‘SQL*PLUS’,不支援萬用字元; |
USERID |
規則應用的資料庫使用者ID,來disabled某個使用者執行某種操作的能力; |
支援使用萬用字元%;可以為hr、SC%、%; 意味著規則可以對多個使用者使用; 必須為大寫! |
ATTRIBUTE |
包括在SQL、PL/SQL和SQL*PLUS中需要禁用的命令。 |
如果要禁用角色設定功能,則需要加入“ROLES”在字串中; |
SCOPE |
無輸入,Oracle推薦輸入null; |
留待其他產品使用; |
NUMBERIC_VALUE |
無輸入,Oracle推薦輸入null; |
留待其他產品使用; |
CHAR_VALUE |
如果採用禁用SQL、SQLPLUS和PLSQL命令的方式,輸入“DISABLED”; |
如果要禁用角色設定功能,必須包括要禁用的角色名稱; |
DATE_VALUE |
無輸入,Oracle推薦輸入null; |
留待其他產品使用; |
LONG_VALUE |
無輸入,Oracle推薦輸入null; |
留待其他產品使用; |
|
|
|
從資料列的解析上看,Oracle是希望將PUP作為一個安全體系來進行推廣,構建所謂的“Product-Level Security”。雖然目前使用的主要是SQL*PLUS,但以後存在擴充的空間。
PUP資料表是在SYSTEM使用者下,SYSTEM使用者具有全部許可權。其他使用者只有select許可權。這樣可以儘可能的保護配置專案安全。
下面,我們進行一系列的配置實驗。配置PUP的過程是比較簡單的,使用簡單的insert語句就可以將配置規則插入到其中,不過記住一定是使用system使用者登入。
//使用system登入
SQL> conn system/system@orcl;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
//向資料表中插入資料
SQL> insert into product_user_profile (product, userid, attribute, char_value)
2 values ('SQL*PLUS','%','INSERT','DISABLED');
1 row inserted
SQL> commit; //建立一條規則
……(篇幅原因,略)
SQL> col attribute format a10;
SQL> col product format a10;
SQL> col userid format a10;
SQL> col char_value format a10;
SQL> select product,userid,attribute,char_value from product_user_profile;
PRODUCT USERID ATTRIBUTE CHAR_VALUE
---------- ---------- ---------- ----------
SQL*PLUS % INSERT DISABLED
SQL*PLUS % UPDATE DISABLED
SQL*PLUS % DELETE DISABLED
SQL*PLUS SCOTT HOST DISABLED
上面指令碼定義了一個規則集合。簡要的說,就是所有的使用者在使用SQL*PLUS的時候,不能使用insert、update和delete型別的dml語句。使用者scott,不允許使用sqlplus命令host(host命令的作用就是在sqlplus中呼叫作業系統命令列方法)。萬用字元%表示使用所有使用者。下面進行試驗:
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2月 9 20:29:44 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn hr/hr@orcl;
已連線。
SQL> select count(*) from jobs; //Select命令沒有禁止
COUNT(*)
----------
19
SQL> delete from jobs;
SP2-0544: 在產品使用者概要檔案中禁用命令 "delete" //報錯禁止!
SQL> insert into region values(10,'dkk');
SP2-0544: 在產品使用者概要檔案中禁用命令 "insert" //報錯禁止!
SQL> update employees set first_name=null;
SP2-0544: 在產品使用者概要檔案中禁用命令 "update" //報錯禁止!
SQL>
SQL> host notepad //OS命令列工具,可以使用!
現在我們轉換使用者為scott。
SQL> conn scott/tiger@orcl
已連線。
SQL> delete from emp;
SP2-0544: 在產品使用者概要檔案中禁用命令 "delete" //作為%使用者的一員,被禁用!
SQL> host calc
SP2-0544: 在產品使用者概要檔案中禁用命令 "host" //針對scott使用者的設定,被禁用!
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-686923/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL*Plus安全(二)SQL
- SQL*PLUS安全(三)SQL
- SQL*PLUS安全(四)SQL
- 使用sql*plus時的一個安全小問題SQL
- SQL*PLUS命令的使用大全(一)薦SQL
- 使用sql*plus就要show一下SQL
- 使用SQL*PlusSQL
- SQL*Plus Enhancements in Oracle Database 10g(一)SQLOracleDatabase
- 【sqlplus】SQL*Plus命令使用大全SQL
- SQL*Plus Substitution VariablesSQL
- set autotrace in SQL*PlusSQL
- sql*plus入門SQL
- 使用sql*plus編輯sql文字SQL
- ORACLE SQL and SQL*PLUS (strong recommend)OracleSQL
- sql之27 using sql*plusSQL
- sql之26 using sql*plusSQL
- SQL入門之6 sql*plusSQL
- SQL*Plus的簡單使用之一(轉)SQL
- 【SQL*Plus】使用SQL*Plus的Preliminary方式連線資料庫SQL資料庫
- 【SQL*Plus】在SQL*Plus中謹慎使用Ctrl+S快捷鍵SQL
- 【SQL*Plus】使用SQL*Plus的-S選項精簡輸出資訊SQL
- SQL * Plus Copy 命令SQL
- sql_plus操作命令SQL
- 常用的sql*plus命令:SQL
- 在sql*plus裡編輯SQL命令SQL
- 【SQL*Plus】處理 SQL*Plus的標頭無法顯示問題SQL
- 使用OEM,SQL*Plus,iSQL*Plus 管理Oracle例項SQLOracle
- SQL/Plus中的一些容易混淆的問題SQL
- 1.3.2. 關於SQL*PlusSQL
- plustrce.sql的作用SQL
- sql plus命令使用總結SQL
- SQL*PLUS 環境變數SQL變數
- SQL/PLUS 常用命令SQL
- sql*plus 常用命令SQL
- SQL/PLUS命令的使用大全SQL
- SQL*PLUS命令的使用大全SQL
- SQL*PLUS -L選項巧用SQL
- SQL*PLUS命令, set命令大全SQL