Oracle 9i (9.2.0) 雖為經典版本,其安裝配置與權限體系設計原理至今仍具指導意義。本文規範安裝關鍵參數、字符集選擇、系統預設用戶、應用用戶創建與最小權限授權模型,構建可審計、可復現、符合最小權限原則的資料庫基線。
| 參數 | 標準值 | 說明 |
|---|---|---|
| 安裝目錄 (ORACLE_BASE) | /u01/app/oracle | 遵循 OFA (Optimal Flexible Architecture) |
| 軟體目錄 (ORACLE_HOME) | /u01/app/oracle/product/9.2.0 | 版本化路徑,支援多版本共存 |
| 資料庫名 (DB_NAME) | ORA9I | 全域唯一,與 SID 一致 |
| 實例名 (SID) | ORA9I | 與 DB_NAME 一致,簡化管理 |
| 字符集 (CHARACTER SET) | ZHS16GBK | 關鍵:支援簡體中文 (GBK),避免跨平台中文亂碼。禁用 US7ASCII、WE8ISO8859P1、UTF8 (9i 字符集遷移極其痛苦) |
| 國家字符集 | AL16UTF16 | NCHAR/NVARCHAR2/NCLOB 儲存編碼,預設即可 |
| 資料庫區塊大小 | 8192 (8KB) | OLTP 標準,若為 DW 可考慮 16KB/32KB |
| 進程數 (PROCESSES) | 300+ | 預估最大併發 Session * 1.5 |
| 啟用歸檔模式 | 安裝後立即啟用 | 參考案例五 SOP |
| 用戶 | 預設密碼 | 角色/用途 | 上線前強制動作 |
|---|---|---|---|
| SYS | CHANGE_ON_INSTALL | 資料字典擁有者、SYSDBA | 修改強密碼、鎖定遠端登入 (O7_DICTIONARY_ACCESSIBILITY=FALSE) |
| SYSTEM | MANAGER | 第二 DBA、管理工具 | 修改強密碼、日常運維用此用戶 |
| SCOTT | TIGER | 範例 Schema | 生產環境 DROP USER SCOTT CASCADE |
| OUTLN | OUTLN | Stored Outlines | 保留、鎖定 |
| DBSNMP | DBSNMP | OEM 代理監控 | 修改密碼、授權 OEM_MONITOR |
密碼策略:Profile 限制 PASSWORD_LIFE_TIME=90, PASSWORD_REUSE_TIME=365, PASSWORD_VERIFY_FUNCTION (複雜度檢查)。
-- 1. 建立專用表空間 (資料/索引/臨時/撤銷分離)
CREATE TABLESPACE app_data DATAFILE '/u01/oradata/ORA9I/app_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M MAXSIZE 10G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE app_index DATAFILE '/u01/oradata/ORA9I/app_index01.dbf' SIZE 200M AUTOEXTEND ON NEXT 20M MAXSIZE 5G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO;
CREATE TEMPORARY TABLESPACE app_temp TEMPFILE '/u01/oradata/ORA9I/app_temp01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 2G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
-- 2. 創建應用用戶 (預設表空間指定,配額無限)
CREATE USER app_user IDENTIFIED BY "ComplexP@ssw0rd"
DEFAULT TABLESPACE app_data
TEMPORARY TABLESPACE app_temp
QUOTA UNLIMITED ON app_data
QUOTA UNLIMITED ON app_index
PROFILE app_profile; -- 密碼/資源 Profile
-- 3. 授予最小權限角色 (而非 DBA/RESOURCE/CONNECT)
GRANT CREATE SESSION TO app_user;
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER, CREATE SYNONYM TO app_user;
-- 明確不授予: CREATE PUBLIC SYNONYM, DROP PUBLIC SYNONYM, ALTER DATABASE, ALTER SYSTEM, UNLIMITED TABLESPACE
-- 4. 建立應用專用角色 (業務權限聚合)
CREATE ROLE app_read;
GRANT SELECT ON app_user.table1 TO app_read;
GRANT SELECT ON app_user.table2 TO app_read;
-- ... 其他業務表 SELECT
CREATE ROLE app_write;
GRANT INSERT, UPDATE, DELETE ON app_user.table1 TO app_write;
-- ... 其他業務表 DML
-- 將角色授予具體帳號 (讀寫分離帳號)
GRANT app_read TO app_report_user;
GRANT app_write TO app_batch_user;
RESOURCE 含 UNLIMITED TABLESPACE、CREATE TYPE 等高危權限;CONNECT 僅 CREATE SESSION,9i+ 已棄用。CREATE OBJECT 類權限,禁止 ANY 類權限 (SELECT ANY TABLE, DROP ANY TABLE...)。APP_READ, APP_WRITE, APP_ADMIN 角色,授予角色而非直接授予用戶,便於收回/審計。AUDIT CREATE TABLE, DROP TABLE, ALTER USER, GRANT ANY PRIVILEGE BY ACCESS;DBA_TAB_PRIVS, DBA_SYS_PRIVS, DBA_ROLE_PRIVS 產出權限報表,清理殭屍授權。O7_DICTIONARY_ACCESSIBILITY = FALSE (init.ora) —— 禁止非 SYS 存取字典基表。REMOTE_OS_AUTHENT = FALSE —— 禁止 OS 認證遠端登入。SEC_CASE_SENSITIVE_LOGON = TRUE (11g+ 內建,9i 需補丁) —— 密碼大小寫敏感。ADMIN_RESTRICTIONS_LISTENER=ON、PASSWORDS_LISTENER 設定密碼。SQLNET.ENCRYPTION_SERVER = REQUIRED, SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)。Oracle 9i 安裝標準化的核心在於:字符集一步到位 (ZHS16GBK)、系統用戶密碼強制輪換、應用用戶表空間分離與配額控制、最小權限角色體系替代 DBA/RESOURCE、安全參數預設即加固。將上述流程固化為安裝 Runbook (含腳本、核對清單、驗證 SQL),新環境部署「一次做對,永久受益」。