news 2026/8/16 8:26:26

Oracle 19c入门学习教程,从入门到精通,Oracle 用户管理与权限分配 —— 语法详解与实战案例(13)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle 19c入门学习教程,从入门到精通,Oracle 用户管理与权限分配 —— 语法详解与实战案例(13)

Oracle 用户管理与权限分配 —— 语法详解与实战案例


一、环境准备:Oracle 安装简要说明(以 Oracle Database 21c Express Edition 为例)

注意:本章节重点为用户与权限管理,安装过程仅作必要引导。

1. 安装 Oracle Database 21c XE(Windows/Linux)

Windows 安装步骤简述:
  1. 下载 Oracle Database 21c XE 安装包(官网链接)
  2. 以管理员身份运行setup.exe
  3. 选择安装类型:Desktop Class(单机开发)或Server Class
  4. 设置数据库口令(用于 SYS、SYSTEM 等内置账户)
  5. 完成安装后,默认监听端口为 1521,服务名为XE
Linux(Ubuntu/CentOS)安装简述:
# 示例:Ubuntu 22.04wgethttps://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpmsudodnfinstalloracle-database-xe-21c-1.0-1.ol8.x86_64.rpmsudo/etc/init.d/oracle-xe-21c configure

配置过程中设置 SYS/SYSTEM 密码。

安装完成后,使用 SQL*Plus 或 SQL Developer 连接数据库:

sqlplus sys/your_password@localhost:1521/XE as sysdba

二、核心语法知识点详解与案例


1. 用户与模式(Schema)的关系

  • 用户(User):数据库中的账户,用于身份验证。
  • 模式(Schema):用户拥有的数据库对象(表、视图、索引等)的集合。
  • 关系:每个用户自动拥有一个同名的模式。创建用户即创建同名模式。

✅ 用户 ≠ 模式,但默认一一对应。


2. 创建用户

语法:
CREATEUSERusername IDENTIFIEDBYpassword[DEFAULTTABLESPACEtablespace_name][TEMPORARYTABLESPACEtemp_tablespace][PROFILE profile_name][ACCOUNT {LOCK|UNLOCK}];
案例:
-- 创建用户 scott,密码为 tiger-- 默认表空间为 USERS,临时表空间为 TEMPCREATEUSERscott IDENTIFIEDBYtigerDEFAULTTABLESPACEusersTEMPORARYTABLESPACEtempACCOUNTUNLOCK;

🔒 注意:普通用户无权创建用户,需具有CREATE USER系统权限(通常由 DBA 执行)。


3. 修改用户

语法:
ALTERUSERusername[IDENTIFIEDBYnew_password][DEFAULTTABLESPACEtablespace_name][TEMPORARYTABLESPACEtemp_tablespace][PROFILE profile_name][ACCOUNT {LOCK|UNLOCK}];
案例:
-- 修改 scott 密码并锁定账户ALTERUSERscott IDENTIFIEDBYnewpass ACCOUNTLOCK;-- 解锁账户ALTERUSERscott ACCOUNTUNLOCK;

4. 删除用户

语法:
DROPUSERusername[CASCADE];
  • CASCADE:级联删除该用户拥有的所有对象(如表、视图等)。
  • 若用户拥有对象但未加CASCADE,则删除失败。
案例:
-- 删除用户及其所有对象DROPUSERscottCASCADE;

5. 权限简介

  • 系统权限(System Privileges):对整个数据库的操作权限,如CREATE SESSION,CREATE TABLE
  • 对象权限(Object Privileges):对特定对象的操作权限,如SELECT ON emp,UPDATE ON dept

6. 授权操作(GRANT)

6.1 系统权限授权
GRANTprivilege[,privilege...]TOuser_or_role;
案例:
-- 授予 scott 登录和建表权限GRANTCREATESESSION,CREATETABLETOscott;
6.2 对象权限授权
GRANTobject_privilege[(column_list)]ON[schema.]objectTOuser_or_role[WITHGRANTOPTION];
案例:
-- 假设 hr 用户有 employees 表-- 授予 scott 查询 hr.employees 的权限,并允许其转授GRANTSELECTONhr.employeesTOscottWITHGRANTOPTION;

⚠️WITH GRANT OPTION允许被授权者将权限再授予他人。


7. 撤销权限(REVOKE)

7.1 撤销系统权限
REVOKEprivilegeFROMuser_or_role;
案例:
REVOKECREATETABLEFROMscott;
7.2 撤销对象权限
REVOKEobject_privilegeON[schema.]objectFROMuser_or_role;
案例:
REVOKESELECTONhr.employeesFROMscott;

🔁 撤销权限会级联生效(即使通过WITH GRANT OPTION转授的也会失效)。


8. 查询用户与权限

常用数据字典视图:
视图说明
DBA_USERS所有用户信息(需 DBA 权限)
USER_USERS当前用户信息
DBA_SYS_PRIVS系统权限分配
DBA_TAB_PRIVS对象权限分配
USER_SYS_PRIVS当前用户的系统权限
USER_TAB_PRIVS当前用户的对象权限
案例查询:
-- 查看 scott 用户的系统权限SELECT*FROMDBA_SYS_PRIVSWHEREGRANTEE='SCOTT';-- 查看谁可以访问 hr.employees 表SELECTGRANTEE,PRIVILEGEFROMDBA_TAB_PRIVSWHEREOWNER='HR'ANDTABLE_NAME='EMPLOYEES';

9. 角色管理

9.1 角色简介
  • 角色是一组权限的集合,可简化权限管理。
  • 用户可被授予多个角色,角色也可被授予其他角色(避免循环)。
9.2 预定义角色
  • CONNECT:基本连接权限(含CREATE SESSION
  • RESOURCE:开发常用权限(含CREATE TABLE,CREATE SEQUENCE等)
  • DBA:全部系统权限(谨慎使用!)

💡 Oracle 12c+ 中,CONNECTRESOURCE已精简,建议显式授权。

9.3 创建角色与授权
语法:
CREATEROLE role_name[NOTIDENTIFIED|IDENTIFIEDBYpassword];
案例:
-- 创建开发角色CREATEROLE dev_role;-- 授予角色权限GRANTCREATESESSION,CREATETABLE,CREATEVIEWTOdev_role;-- 将角色授予用户GRANTdev_roleTOscott;

🔐IDENTIFIED BY password表示角色需密码激活(较少用)。

9.4 管理角色
-- 启用/禁用角色(会话级)SETROLE dev_role;-- 启用SETROLE NONE;-- 禁用所有角色(除 DEFAULT)-- 设置默认角色(登录自动启用)ALTERUSERscottDEFAULTROLE dev_role;-- 删除角色DROPROLE dev_role;
9.5 查询角色与权限
-- 用户拥有的角色SELECT*FROMDBA_ROLE_PRIVSWHEREGRANTEE='SCOTT';-- 角色包含的系统权限SELECT*FROMROLE_SYS_PRIVSWHEREROLE='DEV_ROLE';-- 角色包含的对象权限SELECT*FROMROLE_TAB_PRIVSWHEREROLE='DEV_ROLE';

10. 资源配置 PROFILE

10.1 PROFILE 简介
  • 用于限制用户资源使用和密码策略。
  • 每个用户只能关联一个 PROFILE。
10.2 使用 PROFILE 管理密码

常见参数:

  • FAILED_LOGIN_ATTEMPTS:失败登录次数限制
  • PASSWORD_LOCK_TIME:锁定时间(天)
  • PASSWORD_LIFE_TIME:密码有效期(天)
  • PASSWORD_REUSE_TIME:密码重用间隔
案例:创建安全 PROFILE
CREATEPROFILE secure_profileLIMITFAILED_LOGIN_ATTEMPTS3PASSWORD_LOCK_TIME1PASSWORD_LIFE_TIME90PASSWORD_REUSE_TIME365;
10.3 使用 PROFILE 管理资源

常见参数:

  • SESSIONS_PER_USER:并发会话数
  • CPU_PER_SESSION:CPU 秒数/会话
  • CONNECT_TIME:连接总时长(分钟)
  • IDLE_TIME:空闲超时(分钟)
案例:
ALTERPROFILE secure_profileLIMITSESSIONS_PER_USER2CPU_PER_SESSION3600IDLE_TIME30;
10.4 维护 PROFILE
-- 将 PROFILE 分配给用户ALTERUSERscott PROFILE secure_profile;-- 修改现有 PROFILEALTERPROFILEdefaultLIMITFAILED_LOGIN_ATTEMPTS5;-- 删除 PROFILE(不能删除正在使用的)DROPPROFILE secure_profile;
10.5 显示 PROFILE 信息
-- 查看所有 PROFILE 限制SELECT*FROMDBA_PROFILESWHEREPROFILE='SECURE_PROFILE';-- 查看用户使用的 PROFILESELECTUSERNAME,PROFILEFROMDBA_USERSWHEREUSERNAME='SCOTT';

三、综合性实战案例

场景:为一家公司搭建开发与测试环境

目标:
  1. 创建开发人员用户dev1dev2
  2. 创建测试人员用户tester1
  3. 设置角色:developer_roletester_role
  4. 应用安全 PROFILE
  5. 授权访问 HR 模式下的表

步骤代码(以 SYSDBA 身份执行):

-- 1. 创建安全 PROFILECREATEPROFILE app_user_profileLIMITFAILED_LOGIN_ATTEMPTS3PASSWORD_LOCK_TIME1PASSWORD_LIFE_TIME60SESSIONS_PER_USER2IDLE_TIME20;-- 2. 创建角色CREATEROLE developer_role;CREATEROLE tester_role;-- 3. 授予角色权限-- 开发者:可建表、查 HR 数据、建视图GRANTCREATESESSION,CREATETABLE,CREATEVIEWTOdeveloper_role;GRANTSELECT,INSERT,UPDATE,DELETEONhr.employeesTOdeveloper_role;GRANTSELECTONhr.departmentsTOdeveloper_role;-- 测试者:只读 HR 数据GRANTCREATESESSIONTOtester_role;GRANTSELECTONhr.employeesTOtester_role;GRANTSELECTONhr.departmentsTOtester_role;-- 4. 创建用户CREATEUSERdev1 IDENTIFIEDBYDevPass123 PROFILE app_user_profile;CREATEUSERdev2 IDENTIFIEDBYDevPass456 PROFILE app_user_profile;CREATEUSERtester1 IDENTIFIEDBYTestPass789 PROFILE app_user_profile;-- 5. 授予角色GRANTdeveloper_roleTOdev1,dev2;GRANTtester_roleTOtester1;-- 6. 设置默认角色(登录自动激活)ALTERUSERdev1DEFAULTROLE developer_role;ALTERUSERdev2DEFAULTROLE developer_role;ALTERUSERtester1DEFAULTROLE tester_role;-- 7. 验证SELECTGRANTEE,GRANTED_ROLEFROMDBA_ROLE_PRIVSWHEREGRANTEEIN('DEV1','DEV2','TESTER1');

用户登录后操作示例(以 dev1 为例):

-- 连接数据库-- sqlplus dev1/DevPass123@localhost:1521/XE-- 创建自己的表CREATETABLEmy_projects(id NUMBER,name VARCHAR2(100));-- 查询 HR 数据SELECT*FROMhr.employeesWHEREdepartment_id=50;-- 插入数据(因有 INSERT 权限)INSERTINTOhr.employees(...)VALUES(...);

四、注意事项与最佳实践

  1. 最小权限原则:只授予必要权限。
  2. 避免直接授权给用户:优先使用角色管理权限。
  3. 定期审计权限:使用DBA_SYS_PRIVSDBA_TAB_PRIVS检查异常授权。
  4. PROFILE 是安全基线:强制密码策略和资源限制。
  5. 不要滥用 DBA 角色:开发/测试环境也应模拟生产权限模型。

✅ 本章内容覆盖 Oracle 用户、权限、角色、PROFILE 全生命周期管理,适用于 Oracle 12c/19c/21c。


如需进一步自动化脚本或与应用集成(如 JDBC 连接字符串配置),可继续扩展。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 21:13:23

FSMN-VAD对比传统方法:AI模型更抗噪

FSMN-VAD对比传统方法:AI模型更抗噪 你有没有遇到过这样的尴尬? 会议录音里,空调嗡嗡声、键盘敲击声、偶尔的咳嗽声,全被语音识别系统当成了“有效语音”,结果转写出来一堆乱码; 车载语音助手在高速行驶时…

作者头像 李华
网站建设 2026/8/11 10:10:48

基于深度学习的行人车辆流量统计算法研究

目录深度学习在行人车辆流量统计中的应用关键技术方法典型应用场景性能优化方向挑战与解决方案源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!深度学习在行人车辆流量统计中的应用 基于深度学习的行人车辆流量统计主要利用计算机视觉技…

作者头像 李华
网站建设 2026/8/12 23:18:42

基于深度学习的遥感检测系统

目录 深度学习遥感检测系统概述关键技术组成典型应用场景挑战与解决方案性能评估指标未来发展方向 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 深度学习遥感检测系统概述 深度学习遥感检测系统利用卷积神经网络(CNN&am…

作者头像 李华
网站建设 2026/8/12 23:18:13

工程建筑网页应用中,如何实现文件上传下载的三种方案?

2023年XX月XX日 🌟 | 一个菜鸟程序员的“秃头”日记 💻 今日份的崩溃与突破 早上8点:对着镜子默念三遍——“我能搞定10G文件上传!”(然后发现IE8连console.log都报错…) 上午10点:试图用WebU…

作者头像 李华
网站建设 2026/8/8 4:41:42

Multisim14.0安装教程:教育场景下兼容性问题深度剖析

以下是对您提供的博文内容进行 深度润色与结构优化后的技术文章 。整体风格更贴近一位资深高校电子实验室工程师/教学技术支持人员的实战经验分享,语言自然、逻辑严密、重点突出,去除了AI生成痕迹和模板化表达,强化了教育场景的真实感、问题导向性与可操作性。全文已按专业…

作者头像 李华
网站建设 2026/8/10 0:49:57

小程序加密痛点破局:CE固定动态密钥+全流程自动化加解密实战指南

在小程序生态高速发展的当下,数据传输与本地存储的加密防护已成为开发者的必备工作,而动态密钥加解密作为小程序主流的安全方案,虽大幅提升了加密安全性,却也带来了开发调试繁琐、前后端联调效率低、加解密代码耦合业务、异常排查…

作者头像 李华