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、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...