Oracle 数据库创建用户并分配只读的权限
引言
在 Oracle 数据库的日常运维和开发过程中,用户管理是确保数据安全与访问控制的关键环节。通过合理创建用户并分配适当的权限,可以有效防止未授权的访问和操作。本文将详细介绍如何在 Oracle 数据库中:
- 创建新用户并设置复杂密码。
- 授予用户基本的登录权限。
- 为用户分配特定表的只读权限。
- 处理与密码复杂性和特殊字符相关的问题。
- 解决常见的权限和登录问题。
一、创建新用户并设置复杂密码
1.1 创建用户的基本语法
在 Oracle 数据库中,创建用户的基本命令如下:
CREATE USER user_name IDENTIFIED BY password;
user_name
:新用户的用户名。password
:用户的登录密码。
示例:
CREATE USER read_only_user IDENTIFIED BY "P@ssw0rd!";
1.2 设置包含特殊字符的密码
为了增强安全性,密码通常包含字母、数字和特殊字符(如 !@#$%^&*()
等)。当密码中包含特殊字符时,建议使用双引号将密码括起来,以避免 SQL 解析错误。
示例:
CREATE USER user_name IDENTIFIED BY "P@ssw0rd!";
注意事项:
- 密码长度:默认至少 8 个字符,具体取决于数据库的密码策略配置。
- 区分大小写:从 Oracle 11g 开始,密码默认区分大小写。
- 避免使用敏感符号:避免使用如单引号
'
或分号;
等可能引发 SQL 语法冲突的字符。
1.3 相关知识点扩展
- 用户与模式(Schema):在 Oracle 中,用户即是一个模式(Schema)。创建用户意味着创建了一个独立的命名空间,用于存储该用户拥有的数据库对象(如表、视图、存储过程等)。
- 权限模型:Oracle 的权限体系分为系统权限和对象权限。系统权限控制用户可以执行的操作类型(如连接数据库、创建表等),而对象权限控制用户对特定数据库对象的操作权限(如查询、插入、更新特定表)。
二、授予用户基本的登录权限
新创建的用户需要具备基本的登录权限才能连接到数据库并执行后续操作。
2.1 授予 CREATE SESSION
权限
CREATE SESSION
是允许用户连接到数据库的基本系统权限。
GRANT CREATE SESSION TO user_name;
示例:
GRANT CREATE SESSION TO read_only_user;
相关知识点扩展
- 系统权限:除了
CREATE SESSION
,还有许多其他系统权限,如CREATE TABLE
、CREATE VIEW
等,具体根据用户的需求进行授予。 - 最小权限原则:仅授予用户完成其工作所需的最小权限,以减少潜在的安全风险。
三、为用户赋予只读权限
在许多场景下,用户只需要对特定表具有读取数据的能力,而无需进行数据修改。通过授予 SELECT
权限,可以实现这一需求。
3.1 授予 SELECT
权限的基本语法
GRANT SELECT ON schema_name.table_name TO user_name;
schema_name
:表的拥有者。table_name
:目标表的名称。user_name
:目标用户的用户名。
示例:
GRANT SELECT ON HR.EMPLOYEES TO read_only_user;
GRANT SELECT ON HR.DEPARTMENTS TO read_only_user;
3.2 批量授予只读权限
如果需要为用户赋予多个表的只读权限,可以一次性执行多个 GRANT
语句,或使用脚本自动化处理。
示例:
BEGINFOR tbl IN (SELECT table_name FROM all_tables WHERE owner = 'HR') LOOPEXECUTE IMMEDIATE 'GRANT SELECT ON HR.' || tbl.table_name || ' TO read_only_user';END LOOP;
END;
/
3.3 相关知识点扩展
-
对象权限:除了
SELECT
,还有其他对象权限如INSERT
、UPDATE
、DELETE
,根据需要进行授予。 -
角色管理:可以创建角色(Role),并将权限赋予角色,再将角色授予用户,以简化权限管理。
示例:
CREATE ROLE read_only_role; GRANT SELECT ON HR.EMPLOYEES TO read_only_role; GRANT SELECT ON HR.DEPARTMENTS TO read_only_role; GRANT read_only_role TO read_only_user;
四、设置包含特殊字符的密码
在用户创建过程中,设置包含特殊字符的密码是常见需求,以下是具体操作步骤和注意事项。
4.1 使用双引号括起包含特殊字符的密码
当密码中包含特殊字符时,使用双引号可以确保密码被正确解析。
示例:
CREATE USER secure_user IDENTIFIED BY "Str0ng!Passw@rd";
4.2 遇到密码复杂度不符合要求的处理
如果数据库启用了密码复杂度验证,创建用户或修改密码时可能会遇到复杂度不符合要求的错误。
解决方案:
-
检查当前的密码验证策略:
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION';
-
修改密码验证函数(如有必要):
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;
注意:修改密码验证策略可能会降低数据库的安全性,应谨慎操作,并在必要时与安全团队协商。
4.3 相关知识点扩展
-
密码策略:包括密码长度、复杂性、历史记录等,可以通过 Oracle 的 Profiles 进行配置。
-
Profiles:Profiles 用于定义一组用户的资源限制和密码策略。
示例:
CREATE PROFILE secure_profile LIMIT PASSWORD_LIFE_TIME 90 PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 5 FAILED_LOGIN_ATTEMPTS 5 PASSWORD_VERIFY_FUNCTION ora12c_verify_function;ALTER USER read_only_user PROFILE secure_profile;
五、常见问题与故障排查
在实际操作过程中,可能会遇到一些常见问题。以下是常见问题的解决方案:
5.1 用户无法登录
可能原因:
- 未授予
CREATE SESSION
权限。
解决方案:
GRANT CREATE SESSION TO user_name;
5.2 权限不足错误
可能原因:
- 用户未被授予对特定表的
SELECT
权限。
解决方案:
GRANT SELECT ON schema_name.table_name TO user_name;
5.3 密码复杂度不符合要求
可能原因:
- 密码未满足数据库的复杂度策略。
解决方案:
- 修改密码以符合策略要求,或调整密码验证函数(需谨慎)。
5.4 特殊字符引发的语法错误
可能原因:
- 密码中的特殊字符未使用双引号括起,导致 SQL 解析错误。
解决方案:
- 使用双引号括起密码重新创建用户或修改密码。
示例:
CREATE USER user_name IDENTIFIED BY "P@ssw0rd!";
六、总结与实践建议
6.1 安全优先
通过精细化权限控制,可以建立更安全的数据访问环境。只读账户适用于数据审计、观察和分析等场景,最大程度降低数据篡改的风险。
6.2 善用数据库安全策略
利用 Oracle 提供的密码复杂度策略、锁定策略和审计日志等功能,构建全面的安全防护体系。根据业务需求和合规要求,合理配置和调整安全策略。
6.3 规范化管理
在生产环境中,建立规范的用户管理和权限分配流程至关重要。建议由数据库管理员(DBA)统一管理用户创建和权限分配,确保一致性和安全性。
最佳实践:
- 使用角色进行权限管理:通过角色简化权限分配,便于管理和审计。
- 定期审计权限:定期检查用户权限,确保权限分配符合最小权限原则。
- 强制密码策略:确保所有用户密码符合复杂度和安全性要求,防止弱密码带来的安全隐患。
结语
本文系统介绍了在 Oracle 数据库中创建用户、设置复杂密码以及赋予只读权限的具体步骤,并探讨了相关的安全策略和常见问题的解决方案。对于具有一定数据库基础的程序员而言,掌握这些用户和权限管理技巧不仅有助于提升数据库管理的效率和安全性,还能为企业的数据保护提供坚实的保障。通过实践和不断学习,您将能够更加游刃有余地应对各种数据库管理挑战。
相关文章:
Oracle 数据库创建用户并分配只读的权限
引言 在 Oracle 数据库的日常运维和开发过程中,用户管理是确保数据安全与访问控制的关键环节。通过合理创建用户并分配适当的权限,可以有效防止未授权的访问和操作。本文将详细介绍如何在 Oracle 数据库中: 创建新用户并设置复杂密码。授予…...

2个GitHub上最近比较火的Java开源项目
1. SpringBlade 微服务架构 标题 SpringBlade 微服务架构 摘要 SpringBlade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 3.2、Spring Cloud 2023等核心技术构建,遵循阿里巴巴编码规范,提供基于React和Vue的两个前端框架&am…...
【jvm】为什么要有GC
目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存,这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理,降低了内存泄漏和内存溢出等问…...

【Rhino】【Python】根据contour创建地形mesh
将surface生成open curve封闭 #codingutf-8 import rhinoscriptsyntax as rs import mathdef adjust_endpoints():# 获取指定图层中的所有曲线all_objects rs.ObjectsByLayer("Level 19")if not all_objects:print("在Level 19图层中未找到对象")return#…...

蓝桥杯软件赛系列---lesson1
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们今天会再开一个系列,那就是蓝桥杯系列,我们会从最基础的开始讲起,大家想要备战明年蓝桥杯的,让我们一起加油。 工具安装 DevC…...
NanoLog起步笔记-1
nonolog起步笔记-1 背景与上下文写在前面Nanolog与一般的实时log的异同现代log的一般特性Nanolog的选择 背景与上下文 因为工作中用到了NanoLog。有必要研究一下。 前段时间研究了许多内容,以为写了比较详实的笔记,今天找了找,不仅笔记没找到…...

汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集
本数据集支持YOLO,COCO,VOC三种格式标记汽车车牌,无论是新能源汽车还是油车都能识别标记,该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70% 2800图片 有效集 20% 800图片 测…...
leetcode33.搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..…...

Ansible自动化运维(三)playbook剧本详解
Ansible自动化运维这部分我将会分为五个部分来为大家讲解 (一)介绍、无密钥登录、安装部署、设置主机清单 (二)Ansible 中的 ad-hoc 模式 模块详解(15)个 (三)Playbook 模式详解 …...

通过PS和Unity制作2D动画之二:IK的使用
一、IK的概念 IK:Inverse Kinematics,反向动力学。 (1)正向动力学 在骨骼动画中,构建骨骼的方法被称为正向动力学。它的表现形式是:子骨骼(关节)的位置根据父骨骼(关节…...

图像边缘检测原理和常用检测算子及MATLAB实现
一、边缘和边缘检测的概念 图像边缘是指图像中灰度值发生急剧变化的地方,这些变化通常对应于图像中物体的轮廓、边界或纹理的突变处。在数字图像处理中,边缘是图像的一个重要特征,它包含了关于物体形状、位置和大小等关键信息。 边缘检测是数…...
企业经营数据分析系统:提升决策能力的利器
搭建企业经营数据分析系统是当今企业绕不开的话题,企业想要在竞争激烈的市场当中突围而出,需要对于企业内部的各种数据了然于胸,同时对于外部的数据也有敏锐的把握能力,因此企业构建自身的经营性数据分析系统就显得尤其重要。作为…...

【49】AndroidStudio构建其他人开发的Android项目
(1)做Android软件开发,通常会看一些其他人开发的项目源码,当将这些项目的源码通过git clone到本地之后,用AndroidStudio进行打开时,通常会遇到一些环境配置的问题。本文即用来记录在构建他人开发项目源代码这一过程中遇到的一些常…...
Oracle 数据库中SERIALLY_REUSABLE包是一种特殊的包类型
1、SERIALLY_REUSABLE 包概述 在 Oracle 数据库中,SERIALLY_REUSABLE包是一种特殊的包类型。这种包的目的是为了更有效地利用内存,特别是在高并发环境下。当一个会话调用SERIALLY_REUSABLE包中的过程或函数时,该包的状态(包括变量…...

css基础记录
基础 选择器 复合选择器 后代选择器 div p {}; 类似如上,找到div中所有的后代,注意是所有的后代 子代选择器 > div > a 只选择div的儿子中有a的 并集选择器 用逗号,分隔 p,div,span,h1 { … } 一般一行写一个 CSS元素显示模式 分为块元素,行内元素 块元素 特点…...
Python后端 -- 万字长文全面解析Django框架
自从2005年诞生以来,Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目,还是大型的企业应用,Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django,从基础知识到高…...

el-thee懒加载删除某条数据 ,el-thee懒加载重置,el-thee刷新某个节点
一、懒加载的tree已经全部展开,外部点击删除的时候不需要重新展开点击获取下一层数据 <template> <el-treeref"tree":data"treeData":props"defaultProps"render-after-expandhighlight-currentlazy:expand-on-click-node&q…...

【PyQt5教程 四】Qt Designer 样式表(styleSheet)实现基本小部件的自定义动态效果和资源浏览器背景添加方法
目录 一、成果演示: 二、样式表的使用方法: (1)样式表语法和属性: (2)样式表代码示例: (3)伪类和状态: (4)复合选择器ÿ…...

【git】--- 通过 git 和 gitolite 管理单仓库的 SDK
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【git】--- 通过 git 和 gitolite 管理单仓库的 SDK 开发环境一、安装配置 gitolite二…...

计算机网络之NAT、代理服务、内网穿透、内网打洞
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之NAT、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...