前言:用戶管理是資料庫安全的第一道防線
Oracle 採用「用戶 = Schema」模型,用戶建立即創建同名 Schema。標準化的建立、授權、密碼策略、鎖定/解鎖、權限審計流程,是合規與安全的基石。本文提供生產環境可直接執行的標準操作手冊,覆蓋全生命週期管理。
一、建立用戶:標準模板與參數詳解
CREATE USER "APP_USER"
PROFILE "DEFAULT" -- 資源/密碼配置檔
IDENTIFIED BY "ComplexP@ssw0rd" -- 密碼 (建議 12+ 位、大小寫、數字、特殊字元)
DEFAULT TABLESPACE "APP_DATA" -- 預設永久表空間
TEMPORARY TABLESPACE "TEMP" -- 預設臨時表空間
QUOTA UNLIMITED ON "APP_DATA" -- 表空間配額 (或具體大小 100M)
ACCOUNT UNLOCK; -- 明確解鎖 (預設即解鎖)
關鍵選項
PROFILE:綁定 PASSWORD_LIFE_TIME, FAILED_LOGIN_ATTEMPTS, PASSWORD_VERIFY_FUNCTION 等安全策略
QUOTA:必須顯式授予表空間配額,否則用戶無法建表 (ORA-01950)
ACCOUNT LOCK/UNLOCK:初建建議 UNLOCK,離職/異常立即 LOCK
二、授權體系:最小權限原則的三層模型
1. 系統權限 (System Privileges) — 能做什麼操作
-- 開發/測試環境常用角色 (生產嚴禁直接授 DBA)
GRANT CREATE SESSION TO app_user; -- 基礎連線權限 (等同 CONNECT 角色核心)
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER TO app_user;
GRANT CREATE SYNONYM, CREATE DATABASE LINK TO app_user;
-- 生產環境最小權限集 (示例)
GRANT CREATE SESSION TO prod_user;
-- 具體物件權限走下層物件授權,不授 CREATE ANY TABLE 等 ANY 權限
2. 物件權限 (Object Privileges) — 能動什麼資料
-- 讀寫權限分離
GRANT SELECT, INSERT, UPDATE, DELETE ON schema1.table_a TO app_user;
GRANT SELECT ON schema1.table_b TO app_user; -- 唯讀表
-- 參考權限 (建立外鍵需)
GRANT REFERENCES ON schema1.parent_table TO app_user;
-- 執行權限 (套件/函數/過程)
GRANT EXECUTE ON schema1.pkg_biz TO app_user;
3. 角色 — 權限集合的容器化管理
-- 建立業務角色
CREATE ROLE app_readonly;
CREATE ROLE app_readwrite;
CREATE ROLE app_admin;
-- 角色授權物件權限
GRANT SELECT ON schema1.table_a TO app_readonly;
GRANT SELECT, INSERT, UPDATE, DELETE ON schema1.table_a TO app_readwrite;
GRANT ALL ON schema1.table_a TO app_admin;
-- 用戶授權角色
GRANT app_readwrite TO app_user;
GRANT app_admin TO dba_user;
-- 角色授權角色 (支援嵌套)
GRANT app_readonly TO app_readwrite;
三、密碼管理與帳號狀態控制
-- 修改密碼 (用戶自助 / DBA 代理)
ALTER USER app_user IDENTIFIED BY "NewComplexP@ssw0rd";
-- 或由用戶執行
PASSWORD -- 交互式修改,舊密碼驗證
-- 解鎖帳號 (連續失敗登入觸發鎖定)
ALTER USER app_user ACCOUNT UNLOCK;
-- 鎖定帳號 (離職/安全事件)
ALTER USER app_user ACCOUNT LOCK;
-- 過期密碼強制修改 (下次登入必改)
ALTER USER app_user PASSWORD EXPIRE;
-- 歷史密碼驗證 (防重用)
-- 需在 PROFILE 設置 PASSWORD_REUSE_TIME / PASSWORD_REUSE_MAX
四、權限審計查詢:標準化巡檢 SQL
| 審計目標 | 查詢視圖 | 關鍵 SQL |
| 所有用戶列表 | DBA_USERS / ALL_USERS / USER_USERS | SELECT username, account_status, lock_date, expiry_date, default_tablespace FROM dba_users ORDER BY username; |
| 用戶系統權限 | DBA_SYS_PRIVS / USER_SYS_PRIVS | SELECT * FROM dba_sys_privs WHERE grantee = 'APP_USER'; |
| 用戶物件權限 | DBA_TAB_PRIVS / USER_TAB_PRIVS | SELECT * FROM dba_tab_privs WHERE grantee = 'APP_USER'; |
| 所有角色 | DBA_ROLES | SELECT * FROM dba_roles; |
| 用戶擁有角色 | DBA_ROLE_PRIVS / USER_ROLE_PRIVS | SELECT * FROM dba_role_privs WHERE grantee = 'APP_USER'; |
| 角色擁有的系統權限 | ROLE_SYS_PRIVS | SELECT * FROM role_sys_privs WHERE role = 'APP_READWRITE'; |
| 角色擁有的物件權限 | ROLE_TAB_PRIVS | SELECT * FROM role_tab_privs WHERE role = 'APP_READWRITE'; |
| 代理用戶權限 (Proxy) | DBA_PROXIES | SELECT * FROM dba_proxies WHERE proxy = 'APP_USER'; |
五、SQL*Plus 快速入門操作流 (新手必讀)
- 連線:
sqlplus system/password@service_name (或 / as sysdba 本機)
- 查看當前用戶:
SHOW USER
- 建立用戶並授權:
CREATE USER dev IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO dev;
- 以新用戶連線:
CONNECT dev/password@service_name
- 建立表空間 (需 DBA):
CREATE TABLESPACE dev_data DATAFILE 'D:\oradata\dev_data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
六、初始化參數與啟動/關閉操作 (補充)
- 參數檔:
init.ora (PFILE) / spfile.ora (SPFILE),修改需重啟或 ALTER SYSTEM SET ... SCOPE=SPFILE
- 啟動:
STARTUP (等價 NOMOUNT → MOUNT → OPEN)
- 關閉:
SHUTDOWN IMMEDIATE (正常) / SHUTDOWN ABORT (緊急,下次啟動需例項恢復)
- 表空間建立工具:Enterprise Manager /
CREATE TABLESPACE SQL / DBCA
- 回滾段:
CREATE ROLLBACK SEGMENT (手動管理模式) / 自動 UNDO 管理 (推薦 UNDO_MANAGEMENT=AUTO)
七、預設帳號與密碼 (安裝後必改)
| 用戶 | 預設密碼 | 用途 | 必改動作 |
| SYS | CHANGE_ON_INSTALL | 最高權限 (SYSDBA) | 立即修改、鎖定遠程登入 (SEC_CASE_SENSITIVE_LOGON=TRUE) |
| SYSTEM | MANAGER | 管理權限 | 立即修改 |
| SCOTT | TIGER | 示範用戶 | 鎖定/刪除 (生產環境) |
| SYSMAN | OEM_TEMP | OEM 管理 | 立即修改 |
| INTERNAL | ORACLE | 舊版 SVRMGRL 兼容 | 12c+ 已移除 |
總結
用戶管理不是「建個帳號給密碼」那麼簡單。標準化模板、最小權限分層、密碼策略綁定 Profile、定期權限審計 SQL、預設帳號清理,這五大支柱構成合規的用戶治理體系。請將本手冊作為團隊「用戶管理 SOP」,每個新用戶建立、每次權限變更、每季度審計,都按此執行、留痕、複核。安全,不在於多複雜的技術,而在於多嚴格的紀律。
- 上一篇文章: Oracle 密碼誤更新修復實戰:PL/SQL 遊標精準回滾單一欄位,業務零停機
- 下一篇文章: Oracle 線上重定義表 (DBMS_REDEFINITION) 完整實戰指南:零停機結構變更的藝術
Copyright ©
程式碼之家 All Rights Reserved