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、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
