【Oracle数据库指南】第22篇:Oracle用户与权限管理详解

📅 2026/7/3 14:35:26 👁️ 阅读次数 📝 编程学习
【Oracle数据库指南】第22篇:Oracle用户与权限管理详解

上一篇【第21篇】Oracle表空间管理详解
下一篇【第23篇】Oracle模式对象管理详解


摘要

用户与权限管理是Oracle数据库安全管理的核心。本文详细讲解Oracle用户账户的创建与管理、系统权限与对象权限的授予与回收、角色(Role)的创建与应用、资源配置文件(Profile)的使用,以及权限审计与最佳实践,帮助DBA构建安全、可控的数据库访问体系。


一、Oracle用户管理

1.1 用户账户概述

Oracle用户账户是连接数据库的身份标识,包含:

  • 用户名和密码
  • 默认表空间
  • 临时表空间
  • 表空间配额
  • 账户状态(锁定/解锁)
  • 资源配置文件
-- 查看所有用户SELECTusername,account_status,default_tablespace,temporary_tablespace,createdFROMdba_usersORDERBYusername;

1.2 创建用户

-- 基本语法CREATEUSERusername IDENTIFIEDBYpassword[DEFAULTTABLESPACEtablespace_name][TEMPORARYTABLESPACEtemp_tablespace_name][QUOTA size|UNLIMITEDONtablespace_name][PROFILE profile_name][PASSWORD EXPIRE][ACCOUNTLOCK|UNLOCK];-- 示例1:创建普通用户CREATEUSERapp_user IDENTIFIEDBY"App#2024!"DEFAULTTABLESPACEusers_dataTEMPORARYTABLESPACEtempQUOTA100MONusers_data QUOTA UNLIMITEDONusers_index PROFILE app_profile ACCOUNTUNLOCK;-- 示例2:创建只读用户CREATEUSERreadonly_user IDENTIFIEDBY"ReadOnly#2024!"DEFAULTTABLESPACEusers_dataTEMPORARYTABLESPACEtempQUOTA0ONusers_data PROFILEdefaultPASSWORD EXPIRE ACCOUNTUNLOCK;

1.3 修改用户

-- 修改密码ALTERUSERapp_user IDENTIFIEDBY"NewPass#2024!";-- 修改默认表空间ALTERUSERapp_userDEFAULTTABLESPACEnew_data_ts;-- 修改临时表空间ALTERUSERapp_userTEMPORARYTABLESPACEtemp2;-- 修改表空间配额ALTERUSERapp_user QUOTA200MONusers_data;ALTERUSERapp_user QUOTA UNLIMITEDONusers_index;-- 锁定/解锁账户ALTERUSERapp_user ACCOUNTLOCK;ALTERUSERapp_user ACCOUNTUNLOCK;-- 强制用户修改密码ALTERUSERapp_user PASSWORD EXPIRE;

1.4 删除用户

-- 删除用户(用户下无对象)DROPUSERapp_user;-- 删除用户及其所有对象DROPUSERapp_userCASCADE;-- 先查看用户下有哪些对象SELECTobject_type,COUNT(*)FROMdba_objectsWHEREowner='APP_USER'GROUPBYobject_type;

二、系统权限管理

2.1 系统权限概述

系统权限(System Privilege)允许用户在数据库级别执行特定操作,例如:

  • CREATE SESSION:连接数据库
  • CREATE TABLE:创建表
  • CREATE VIEW:创建视图
  • CREATE PROCEDURE:创建存储过程
  • CREATE USER:创建用户
  • ALTER DATABASE:修改数据库
  • SYSDBA:系统管理员权限
-- 查看所有系统权限SELECTnameFROMsystem_privilege_mapORDERBYname;-- 查看某个用户的系统权限SELECTprivilege,admin_optionFROMdba_sys_privsWHEREgrantee='APP_USER';

2.2 授予系统权限

-- 授予基本连接权限GRANTCREATESESSIONTOapp_user;-- 授予创建对象的权限GRANTCREATETABLE,CREATEVIEW,CREATEPROCEDURETOapp_user;-- 授予表空间使用权限GRANTUNLIMITEDTABLESPACETOapp_user;-- 授予WITH ADMIN OPTION(允许转授)GRANTCREATESESSIONTOapp_userWITHADMINOPTION;-- 授予多个用户GRANTCREATESESSIONTOuser1,user2,user3;

2.3 回收系统权限

-- 回收系统权限REVOKECREATETABLEFROMapp_user;-- 回收所有系统权限REVOKEALLPRIVILEGESFROMapp_user;-- 注意:WITH ADMIN OPTION回收后,被转授的权限不会级联回收

三、对象权限管理

3.1 对象权限概述

对象权限(Object Privilege)允许用户对特定对象(表、视图、过程等)执行操作:

对象类型可用权限
表/视图SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX
存储过程/函数EXECUTE
序列SELECT, ALTER
同义词无(依赖基表权限)
-- 查看某个用户的对象权限SELECTowner,table_name,privilege,grantableFROMdba_tab_privsWHEREgrantee='APP_USER';

3.2 授予对象权限

-- 授予表权限GRANTSELECT,INSERT,UPDATE,DELETEONscott.empTOapp_user;-- 授予列级权限GRANTUPDATE(sal,comm)ONscott.empTOapp_user;-- 授予视图权限GRANTSELECTONscott.emp_viewTOapp_user;-- 授予执行存储过程权限GRANTEXECUTEONscott.calculate_bonusTOapp_user;-- 授予WITH GRANT OPTION(允许转授)GRANTSELECTONscott.empTOapp_userWITHGRANTOPTION;

3.3 回收对象权限

-- 回收对象权限REVOKEINSERT,UPDATEONscott.empFROMapp_user;-- 回收所有权限REVOKEALLONscott.empFROMapp_user;-- 注意:WITH GRANT OPTION回收后,被转授的权限会级联回收

四、角色(Role)管理

4.1 角色概述

角色是权限的集合,用于简化权限管理。Oracle内置角色:

  • CONNECT:基本连接权限(Oracle 10g后需要显式授予)
  • RESOURCE:创建对象的权限
  • DBA:数据库管理员权限
  • EXP_FULL_DATABASE:导出权限
  • IMP_FULL_DATABASE:导入权限

4.2 创建角色

-- 创建角色CREATEROLE app_developer;CREATEROLE app_reader;CREATEROLE app_writer;-- 创建角色并立即授予权限CREATEROLE app_admin IDENTIFIEDBY"Role#2024!";

4.3 给角色授予权限

-- 给开发者角色授予权限GRANTCREATESESSION,CREATETABLE,CREATEVIEW,CREATESEQUENCE,CREATEPROCEDURE,CREATETRIGGERTOapp_developer;-- 给只读角色授予权限GRANTCREATESESSIONTOapp_reader;GRANTSELECTONscott.empTOapp_reader;GRANTSELECTONscott.deptTOapp_reader;-- 给写入角色授予权限GRANTCREATESESSIONTOapp_writer;GRANTINSERT,UPDATE,DELETEONscott.empTOapp_writer;

4.4 将角色授予用户

-- 将角色授予用户GRANTapp_developerTOapp_user;-- 授予多个角色GRANTapp_reader,app_writerTOreport_user;-- 设置默认角色ALTERUSERapp_userDEFAULTROLE app_developer;-- 激活/禁用角色SETROLE app_developer;SETROLEALLEXCEPTapp_writer;

4.5 回收和删除角色

-- 回收角色REVOKEapp_developerFROMapp_user;-- 删除角色DROPROLE app_developer;-- 查看角色包含的系统权限SELECTprivilegeFROMrole_sys_privsWHERErole='APP_DEVELOPER';-- 查看角色包含的对象权限SELECTowner,table_name,privilegeFROMrole_tab_privsWHERErole='APP_READER';

五、资源配置文件(Profile)

5.1 Profile概述

Profile用于限制用户使用的系统资源和密码策略:

  • 密码策略:复杂度、有效期、失败锁定
  • 资源限制:CPU、连接时间、空闲时间
-- 查看所有ProfileSELECTprofile,resource_name,limitFROMdba_profilesORDERBYprofile,resource_name;

5.2 创建Profile

-- 创建应用程序用户ProfileCREATEPROFILE app_profileLIMIT-- 密码策略FAILED_LOGIN_ATTEMPTS5PASSWORD_LIFE_TIME90PASSWORD_REUSE_TIME365PASSWORD_REUSE_MAX10PASSWORD_LOCK_TIME1PASSWORD_GRACE_TIME7PASSWORD_VERIFY_FUNCTION verify_function_11G-- 资源限制SESSIONS_PER_USER10CPU_PER_SESSION UNLIMITED CPU_PER_CALL3000CONNECT_TIME480IDLE_TIME30;

5.3 修改和删除Profile

-- 修改ProfileALTERPROFILE app_profileLIMITFAILED_LOGIN_ATTEMPTS3PASSWORD_LIFE_TIME60;-- 删除ProfileDROPPROFILE app_profile;DROPPROFILE app_profileCASCADE;-- 同时移除用户的Profile关联

六、权限查询与审计

6.1 权限查询

-- 查看当前用户权限SELECT*FROMuser_sys_privs;SELECT*FROMuser_tab_privs;SELECT*FROMuser_role_privs;-- 查看指定用户权限(需要DBA权限)SELECTgrantee,privilege,admin_optionFROMdba_sys_privsWHEREgrantee='APP_USER';SELECTgrantee,owner,table_name,privilegeFROMdba_tab_privsWHEREgrantee='APP_USER';SELECTgrantee,granted_role,admin_optionFROMdba_role_privsWHEREgrantee='APP_USER';-- 查看角色层级(谁拥有哪个角色)SELECT*FROMdba_role_privsSTARTWITHgrantee='APP_USER'CONNECTBYPRIOR granted_role=grantee;

6.2 权限审计

-- 启用会话审计AUDITSESSION;-- 审计特定用户的操作AUDITSELECTTABLE,INSERTTABLE,UPDATETABLE,DELETETABLEBYapp_userBYACCESS;-- 审计所有用户的对象访问AUDITSELECTANYTABLE;-- 查看审计记录SELECTusername,obj_name,action_name,timestampFROMdba_audit_trailWHEREusername='APP_USER'ORDERBYtimestampDESC;

七、最佳实践

7.1 权限设计原则

  1. 最小权限原则:只授予必要的权限
  2. 使用角色:通过角色管理权限,而非直接授予用户
  3. 分离职责:开发、测试、生产环境使用不同用户
  4. 定期审计:定期检查用户权限,回收不必要权限
  5. 密码策略:使用Profile强制密码复杂度

7.2 常见权限配置模板

-- 模板1:应用程序连接用户CREATEUSERapp_conn IDENTIFIEDBY"AppConn#2024!"DEFAULTTABLESPACEusers_dataTEMPORARYTABLESPACEtempQUOTA0ONusers_data PROFILE app_profile;GRANTCREATESESSIONTOapp_conn;-- 模板2:应用程序对象所有者CREATEUSERapp_owner IDENTIFIEDBY"AppOwner#2024!"DEFAULTTABLESPACEusers_dataTEMPORARYTABLESPACEtempQUOTA UNLIMITEDONusers_data QUOTA UNLIMITEDONusers_index PROFILE app_profile;GRANTCREATESESSION,CREATETABLE,CREATEVIEW,CREATESEQUENCE,CREATEPROCEDURE,CREATETRIGGERTOapp_owner;-- 模板3:只读用户CREATEUSERapp_reader IDENTIFIEDBY"AppReader#2024!"DEFAULTTABLESPACEusers_dataTEMPORARYTABLESPACEtempQUOTA0ONusers_data PROFILE app_profile;GRANTCREATESESSIONTOapp_reader;-- 然后授予具体表的SELECT权限

7.3 安全检查清单

-- 1. 查找具有DBA角色的用户SELECTgranteeFROMdba_role_privsWHEREgranted_role='DBA'ANDgranteeNOTIN('SYS','SYSTEM');-- 2. 查找具有SYSDBA权限的用户SELECT*FROMv$pwfile_users;-- 3. 查找密码过期的用户SELECTusername,expiry_dateFROMdba_usersWHEREexpiry_date<SYSDATE+30;-- 4. 查找被锁定的用户SELECTusername,account_status,lock_dateFROMdba_usersWHEREaccount_statusLIKE'%LOCKED%';-- 5. 查找具有ANY权限的用户(安全风险)SELECTgrantee,privilegeFROMdba_sys_privsWHEREprivilegeLIKE'%ANY%';

八、总结

Oracle用户与权限管理的核心要点:

  1. 用户管理:创建、修改、删除用户,设置表空间配额
  2. 系统权限:数据库级别的操作权限,使用WITH ADMIN OPTION
  3. 对象权限:针对特定对象的操作权限,使用WITH GRANT OPTION
  4. 角色管理:权限集合,简化权限管理
  5. Profile:密码策略和资源限制
  6. 权限审计:定期审查权限使用情况
  7. 最佳实践:最小权限、使用角色、定期审计

上一篇【第21篇】Oracle表空间管理详解
下一篇【第23篇】Oracle模式对象管理详解


参考资料

  • 《Oracle 11g数据库管理员指南》— 刘宪军著
  • Oracle官方文档:Database Security Guide - Managing Users and Securing the Database
  • Oracle官方文档:Database SQL Reference - CREATE USER