当前位置: 首页 > news >正文

【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
http://www.jsqmd.com/news/806149/

相关文章:

  • MCO:一体化云原生监控平台实战,简化可观测性栈部署
  • 2026年包布热压机选型指南:转盘式高周波机、非标订做超声波清洗机、高周波熔接机、伺服超声波、单头高周波机、双头超声波机选择指南 - 优质品牌商家
  • 买小提琴前先看这篇!500-2000元小提琴深度横评,5款热门型号拆解
  • 科技早报晚报|2026年5月12日:GUI Agent、编程会话工作台与 npm 安装门禁,今晚更值得做的 3 个技术机会
  • Hutool 各类型标准判空大全
  • Ante语言:无GC系统编程新范式,精化类型与代数效应实践
  • feedclaw:基于AI与本地SQLite的智能RSS摘要工具实践指南
  • 基于NLP与知识图谱的医学对话智能解析系统构建实践
  • 基于 HarmonyOS 6.0 的在线考试页面实战开发:从页面构建到跨端 UI 设计解析
  • Testcontainers-Keycloak:容器化身份认证测试的终极解决方案
  • JSP核心技术要点梳理与实战开发案例详解
  • VCS/URG覆盖率合并实战:从模块到系统的映射与集成
  • 2026横流式冷却塔技术全解析:钢制冷却塔/闭式冷却塔/不锈钢冷却塔/冷却塔填料/凉水塔/圆形冷却塔/横流式冷却塔/选择指南 - 优质品牌商家
  • 2026环戊烷高压发泡机权威品牌名录及性能评测:聚氨酯内饰发泡机/聚氨酯发泡机/聚氨酯高压泡机/胶辊高温弹性体浇注机/选择指南 - 优质品牌商家
  • 【PyTorch实战】从零构建UNet网络:肺部CT影像语义分割全流程解析
  • macOS桌面歌词神器LyricsX:免费开源歌词同步工具完整指南
  • EverOS:为AI智能体构建长期记忆系统的完整指南
  • 在eNSP中简单组网及基础连通性测试
  • 量子噪声逆转技术:EQC在信号处理中的突破应用
  • Windows删除文件权限问题解决
  • 阿里云完全指南:从入门到精通,2026最新实战分享
  • 50个JAVA常见代码大全:学完这篇从Java小白到架构师
  • 2026宜兴实木装修定制TOP名录:宜兴新房装修全包/宜兴现代化全屋定制/宜兴简约风全屋定制/宜兴装修定制上门测量/选择指南 - 优质品牌商家
  • Unity-MCP:基于MCP协议实现AI助手与Unity编辑器的深度集成
  • GOAT-PEFT:大模型高效微调实战指南与LoRA/QLoRA应用解析
  • 更新某个表的字段翻译值为英文
  • Modelsim的sim.do脚本如何编译包含有其它库的verilog文件
  • 基于Node.js与消息队列构建高可靠后台任务处理系统
  • 嵌入式系统调试技术:从基础到高级实战
  • 从数据波动到指标博弈:CRITIC权重法如何量化“信息价值”