透過 SQL*Plus 命令列管理使用者帳號是 DBA 基本功。本文提供標準化的建立/刪除使用者指令範本,含權限授予、角色指派與帳號解鎖完整流程。
CONNECT / AS SYSDBA;
SHUTDOWN ABORT;
STARTUP;
DROP USER user1 CASCADE;
EXIT;
說明:CASCADE 會連同使用者擁有的所有物件一併刪除;SHUTDOWN ABORT 確保無殘留 Session 阻擋刪除。
CREATE USER user1
IDENTIFIED BY VALUES 'fa091872a2cc669c'
DEFAULT TABLESPACE user1
TEMPORARY TABLESPACE temp
PROFILE default
ACCOUNT UNLOCK;
-- 角色授予(含 ADMIN OPTION 可轉授)
GRANT recovery_catalog_owner TO user1 WITH ADMIN OPTION;
GRANT resource TO user1 WITH ADMIN OPTION;
GRANT dba TO user1 WITH ADMIN OPTION;
GRANT connect TO user1 WITH ADMIN OPTION;
-- 設定預設角色
ALTER USER user1 DEFAULT ROLE ALL;
-- 系統權限授予
GRANT select any dictionary TO user1 WITH ADMIN OPTION;
GRANT unlimited tablespace TO user1 WITH ADMIN OPTION;
GRANT alter any procedure TO user1 WITH ADMIN OPTION;
| 子句 | 用途 |
|---|---|
| IDENTIFIED BY VALUES | 指定加密後的密碼雜湊值(適用於遷移場景) |
| DEFAULT TABLESPACE | 指定使用者預設永久表空間 |
| TEMPORARY TABLESPACE | 指定暫存表空間 |
| PROFILE | 指定資源限制與密碼策略設定檔 |
| ACCOUNT UNLOCK | 確保帳號為解鎖狀態 |
| WITH ADMIN OPTION | 允許受授者再轉授該權限/角色 |
| DEFAULT ROLE ALL | 登入時自動啟用所有已授予角色 |
IDENTIFIED BY "complex_password" 而非 VALUES 雜湊DBA_SYS_PRIVS、DBA_TAB_PRIVS、DBA_ROLE_PRIVSREVOKE 回收不再需要的權限-- 查詢使用者系統權限
SELECT * FROM dba_sys_privs WHERE grantee = 'USER1';
-- 查詢使用者物件權限
SELECT table_name, privilege FROM dba_tab_privs WHERE grantee = 'USER1';
-- 查詢使用者角色
SELECT * FROM dba_role_privs WHERE grantee = 'USER1';
-- 查詢當前 Session 有效系統權限
SELECT * FROM session_privs;