本文系統整理 Oracle 資料庫安全架構的核心三要素:使用者帳號、系統/物件權限、角色管理,並提供實戰 SQL 範例。
CREATE USER username IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace_name]
[TEMPORARY TABLESPACE temp_tablespace_name];
可查詢 USER_USERS 取得預設表空間資訊。
ALTER USER username IDENTIFIED BY new_password;
-- 或當前登入用戶自行修改
PASSWORD
DROP USER username; -- 僅限無物件用戶
DROP USER username CASCADE; -- 連同 schema 物件一併刪除
允許執行特定資料庫操作(如 DDL)。常見權限:CREATE SESSION、CREATE TABLE、CREATE ANY TABLE、DBA 等。授權語法:
GRANT privilege_name TO username [WITH ADMIN OPTION];
WITH ADMIN OPTION 允許受授者再授予他人。
針對特定物件(表、視圖、序列等)的操作權限(SELECT、INSERT、UPDATE、DELETE、EXECUTE 等)。
GRANT SELECT, INSERT ON schema.table TO username [WITH GRANT OPTION];
USER_TAB_PRIVS_MADE:我授予他人的表權限USER_COL_PRIVS_MADE:我授予他人的欄位權限USER_TAB_PRIVS_RECD:我接收到的表權限USER_COL_PRIVS_RECD:我接收到的欄位權限REVOKE INSERT ON schema.table FROM username;
注意:撤銷物件權限會級聯移除受授者再授予的權限;系統權限撤銷則不級聯。
-- 私有同義詞
CREATE SYNONYM synonym_name FOR schema.table;
-- 公共同義詞(需 CREATE PUBLIC SYNONYM 權限)
CREATE PUBLIC SYNONYM synonym_name FOR schema.table;
角色是權限的集合,簡化批量授權。
CREATE ROLE role_name [IDENTIFIED BY password];GRANT privilege TO role_name;GRANT role_name TO username;SET ROLE role_name [IDENTIFIED BY password]; / SET ROLE NONE;ALTER USER username DEFAULT ROLE role_name | ALL [EXCEPT role_name] | NONE;USER_ROLE_PRIVS、ROLE_SYS_PRIVS、ROLE_TAB_PRIVSREVOKE role_name FROM username; / DROP ROLE role_name;善用角色機制,能大幅降低大型環境下的權限維護複雜度。