首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料庫網路與安全 FAQ 精粹

     編輯:Oracle 資料庫基礎

常見問題與解答

如何限定特定 IP 存取資料庫

可利用登入觸發器、CMGW 或在 $ORACLE_HOME/network/admin 新增 protocol.ora(9i 可直接修改 sqlnet.ora):

TCP.VALIDNODE_CHECKING=YES
TCP.INVITED_NODES=(ip1,ip2,...)
TCP.EXCLUDED_NODES=(ip1,ip2,...)

如何穿透防火牆連線資料庫

僅見於 Windows 平台,Unix 會自動解決。伺服器端 SQLNET.ORA 設定:

SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH=(TNSNAMES,ONAMES,HOSTNAME)
TRACE_LEVEL_CLIENT=16
註冊表 HOME0 加 [HKEY_LOCAL_MACHINE] USE_SHARED_SOCKET=TRUE

如何使用 hostname 方式連線

僅支援 TCP/IP 小型區域網。修改 listener.ora:

(SID_DESC =
  (GLOBAL_DBNAME = your_hostname)
  (ORACLE_HOME = E:\oracle\ora92)
  (SID_NAME = orcl)
)

用戶端 sqlnet.ora 確保有 NAMES.DIRECTORY_PATH=(HOSTNAME)。

dbms_repcat_admin 安全隱患

若在 SYS 下 GRANT EXECUTE ON DBMS_REPCAT_ADMIN TO PUBLIC 或使用者擁有 EXECUTE ANY PROCEDURE(9i 以下),執行 EXEC SYS.DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA('user') 將獲得極大系統權限。可從 USER_SYS_PRIVS 查看。

不知密碼情況下切換使用者

SELECT PASSWORD FROM DBA_USERS WHERE USERNAME='SCOTT'; -- 記下加密密碼
ALTER USER SCOTT IDENTIFIED BY LION;
CONNECT SCOTT/LION;
-- 執行操作
CONNECT SYSTEM/MANAGER;
ALTER USER SCOTT IDENTIFIED BY VALUES 'F894844C34402B67'; -- 還原密碼
CONNECT SCOTT/TIGER;

資料庫加固清單

  1. 修改 SYS、SYSTEM 密碼
  2. 鎖定/修改/刪除預設使用者:DBSNMP、CTXSYS 等
  3. REMOTE_OS_AUTHENT=FALSE 防遠端直接登入
  4. O7_DICTIONARY_ACCESSIBILITY=FALSE
  5. 移除 PUBLIC 角色不必要權限
  6. 檢查資料檔案權限,避免 666 等
  7. 關閉不需要服務(FTP、NFS 等)
  8. 限制資料庫主機使用者數量
  9. 定期檢查 Metalink/OTN Security Alert
  10. 資料庫與應用放獨立子網,或用 Advanced Security 加密登入
  11. 限制特定 IP 存取
  12. LSNRCTL 設定密碼,防外部關閉監聽器
  13. 避免使用預設 1521 連接埠

檢查預設密碼使用者

SELECT USERNAME FROM DBA_USERS WHERE PASSWORD IN (
  'E066D214D5421CCC', -- DBSNMP
  'F894844C34402B67', -- SCOTT
  'D4C5016086B2DC6A', -- SYS
  'D4DF7931AB130E37'  -- SYSTEM
  -- 其他預設密碼雜湊值...
);

修改預設 XDB 監聽連接埠

Oracle 9i XML DB 預設 HTTP 8080,易衝突。三種修改法:

  1. DBCA → 標準資料庫功能 → 自訂 → Oracle XML DB 選項
  2. OEM Console → XML Database 設定
  3. PL/SQL 包:
    CALL DBMS_XDB.CFG_UPDATE(UPDATEXML(DBMS_XDB.CFG_GET(),
      '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081));
    CALL DBMS_XDB.CFG_UPDATE(UPDATEXML(DBMS_XDB.CFG_GET(),
      '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111));
    COMMIT; EXEC DBMS_XDB.CFG_REFRESH;
    SELECT DBMS_XDB.CFG_GET FROM DUAL;
    

捕捉使用者登入資訊(SID、IP 等)

利用登入觸發器:

CREATE OR REPLACE TRIGGER TR_LOGIN_RECORD
AFTER LOGON ON DATABASE
DECLARE ... BEGIN ... INSERT INTO LOG$INFORMATION ... END;

注意:需有 V_$SESSION、V_$MYSTAT 查詢權限;需預先建立 LOG$INFORMATION 表;SP_WRITE_LOG 可替換為自訂日誌程序。

捕捉全資料庫 DDL 陳述式

使用 DDL 觸發器:

CREATE OR REPLACE TRIGGER TR_TRACE_DDL
AFTER DDL ON DATABASE
DECLARE ... BEGIN ... INSERT INTO DDL$TRACE ... END;

需建立 DDL$TRACE 表。

捕捉表上 DML 陳述式(不含 SELECT)

使用 DML 觸發器:

CREATE OR REPLACE TRIGGER TR_CAPT_SQL
BEFORE DELETE OR INSERT OR UPDATE ON MANAGER.TEST
DECLARE ... BEGIN ... INSERT INTO CAPT$SQL ... END;

需建立 CAPT$SQL 表。

產生日期格式檔名

  • Linux/Unix:`date +%y%m%d` 或 $(date +%y%m%d)
  • Windows:%DATE:~4,10%(從第 4 字元取 10 長度),可搭配 %TIME% 取更精確時間

測試磁碟與陣列效能

TIME DD IF=/DEV/ZERO OF=/ORADATA/BIDDB/TESTIND/TESTFILE.DBF BS=1024000 COUNT=1000
IOSTAT -XNP 2  # 觀察 Busy 程度

配置 SSH 金鑰

  1. ssh-keygen 或 ssh-keygen -d (SSH 2.x) 產生金鑰
  2. 複製公鑰至目標伺服器,改名 authorized_keys(3.0 以下用 authorized_keys2)
  3. 可用 config 簡化:Host *bj\n HostName IP\n User username,之後 ssh bj 即可連線

FTP 腳本自動上傳/下載

FTP -N -I HOST_IP <
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved