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、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
