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、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...