管理口令安全和资源(一)
学习目标
- Manage passwords using profiles:
- 使用配置文件(profiles)来管理密码。这意味着你应该能够设置和修改密码策略,比如密码的复杂性、有效期、尝试次数限制等。在Oracle数据库中,配置文件是一组可以应用于所有用户的预定义资源限制和密码参数。
- Administer profiles:
- 管理配置文件。这包括创建新的配置文件、修改现有配置文件的设置、分配配置文件给用户账户以及删除不再需要的配置文件。
- Control use of resources using profiles:
- 使用配置文件来控制资源的使用。这涉及到设置资源限制,例如会话可以使用的CPU时间、可以同时打开的会话数、可以使用的内存量等,以防止单个用户或一组用户占用过多资源。
- Obtain password and resource limit information:
- 获取密码和资源限制信息。这指的是能够查询数据库,以查看特定用户或配置文件的密码策略和资源限制设置,以及如何解读这些信息。
以下是一个简单的例子,展示了如何在Oracle数据库中执行上述任务:
- 获取密码和资源限制信息。这指的是能够查询数据库,以查看特定用户或配置文件的密码策略和资源限制设置,以及如何解读这些信息。
-- 1. Manage passwords using profiles
-- 创建一个配置文件,设置密码有效期和复杂性要求
CREATE PROFILE my_profile LIMITPASSWORD_LIFE_TIME 90PASSWORD_REUSE_TIME 365PASSWORD_REUSE_MAX UNLIMITEDPASSWORD_VERIFY_FUNCTION ora12c_verify_functionPASSWORD_LOCK_TIME 1;
-- 2. Administer profiles
-- 将配置文件分配给用户
ALTER USER my_user PROFILE my_profile;
-- 修改配置文件
ALTER PROFILE my_profile LIMIT PASSWORD_LIFE_TIME 60;
-- 3. Control use of resources using profiles
-- 设置资源限制,例如每个用户的并发会话数
ALTER PROFILE my_profile LIMIT SESSIONS_PER_USER 5;
-- 4. Obtain password and resource limit information
-- 查询特定用户的配置文件设置
SELECT * FROM DBA_PROFILES WHERE PROFILE = 'MY_PROFILE';
通过配置文件(profiles)来设置密码管理
在Oracle数据库中如何通过配置文件(profiles)来设置密码管理,并将这些配置文件分配给用户,以及如何使用CREATE USER或ALTER USER命令来锁定、解锁和使账户密码过期。以下是每个步骤的详细解释:
- Set up password management by using profiles and assigning them to users:
- 通过使用配置文件来设置密码管理,并将这些配置文件分配给用户。配置文件定义了密码策略,如密码复杂性、有效期、尝试次数限制等。以下是如何操作的示例:
-- 创建一个新的配置文件
CREATE PROFILE my_profile LIMITPASSWORD_LIFE_TIME 90PASSWORD_REUSE_TIME 365PASSWORD_REUSE_MAX UNLIMITEDPASSWORD_VERIFY_FUNCTION ora12c_verify_functionPASSWORD_LOCK_TIME 1;
-- 将配置文件分配给用户
ALTER USER my_user PROFILE my_profile;
- Lock, unlock, and expire accounts using the CREATE USER or ALTER USER command:
- 使用
CREATE USER或ALTER USER命令来锁定、解锁和使账户密码过期。以下是如何操作的示例:
- 使用
-- 创建用户时锁定账户
CREATE USER my_user IDENTIFIED BY my_password ACCOUNT LOCK;
-- 解锁用户账户
ALTER USER my_user ACCOUNT UNLOCK;
-- 使用户密码过期,强制用户在下次登录时更改密码
ALTER USER my_user PASSWORD EXPIRE;
- Password limits are always enforced:
- 密码限制始终被强制执行。这意味着一旦配置文件中设置了密码策略,这些策略将始终应用于相关用户。
- To enable password management, run the utlpwdmg.sql script as the user SYS:
- 要启用密码管理,需要以SYS用户身份运行
utlpwdmg.sql脚本。这个脚本通常包含了设置默认密码策略的SQL命令,以下是如何操作的示例:
- 要启用密码管理,需要以SYS用户身份运行
-- 以SYS用户登录SQL*Plus或SQL Developer
CONNECT SYS AS SYSDBA;
-- 运行utlpwdmg.sql脚本
@?/rdbms/admin/utlpwdmg.sql;
运行utlpwdmg.sql脚本后,数据库将应用默认的密码管理策略,这些策略可以通过修改配置文件来定制。记得在执行这些操作之前备份相关配置,并在生产环境中谨慎操作。
密码账户锁定
在数据库中用于密码账户锁定策略的两个参数及其功能:
-
FAILED_LOGIN_ATTEMPTS
- 描述:这个参数指定了在账户被锁定之前允许的失败登录尝试次数。一旦用户连续失败登录次数达到这个参数设置的值,账户将会被锁定。
-
PASSWORD_LOCK_TIME
- 描述:这个参数指定了账户在被锁定后保持锁定的天数。在指定的天数结束后,账户将自动解锁,用户可以再次尝试登录。
以下是如何在Oracle数据库中设置这些参数的示例:
-- 创建或修改配置文件以设置失败登录尝试次数和锁定时间
CREATE PROFILE my_profile LIMITFAILED_LOGIN_ATTEMPTS 5PASSWORD_LOCK_TIME 2;
-- 将配置文件分配给用户
ALTER USER my_user PROFILE my_profile;
如果用户my_user连续5次登录失败,其账户将被锁定,并且将保持锁定状态2天。
密码历史管理
在数据库中用于密码历史管理的两个参数及其功能:
- PASSWORD_REUSE_TIME
- 描述:这个参数指定了密码可以被重新使用之前需要经过的天数。这意味着用户在更改密码后,必须等待指定的时间才能将旧密码重新设置为新的密码。
- PASSWORD_REUSE_MAX
- 描述:这个参数指定了密码可以被重新使用之前必须进行的最大密码更改次数。用户必须更改密码达到指定的次数后,才能重新使用之前的密码。
以下是如何在Oracle数据库中设置这些参数的示例:
- 描述:这个参数指定了密码可以被重新使用之前必须进行的最大密码更改次数。用户必须更改密码达到指定的次数后,才能重新使用之前的密码。
-- 创建或修改配置文件以设置密码重用时间和最大重用更改次数
CREATE PROFILE myprofile LIMITPASSWORD_REUSE_TIME 365PASSWORD_REUSE_MAX 5;
-- 将配置文件分配给用户
ALTER USER myuser PROFILE myprofile;
对于使用myprofile配置文件的用户myuser,他们不能在一年内重新使用任何旧密码,并且必须在重新使用任何旧密码之前更改密码至少5次。
密码验证
这段文字描述了在Oracle数据库中用于密码验证的一个参数及其功能:
- PASSWORD_VERIFY_FUNCTION
- 描述:这个参数指定了一个PL/SQL函数,该函数在密码被分配给用户之前执行密码复杂性的检查。这个函数可以自定义,以确保密码满足特定的安全要求,比如最小长度、包含数字、大写字母、小写字母和特殊字符等。
- 例子:Oracle数据库提供了一个默认的密码验证函数
ORA12C_VERIFY_FUNCTION,它可以在创建或修改配置文件时被指定为PASSWORD_VERIFY_FUNCTION的值。
以下是如何在Oracle数据库中设置这个参数的示例:
sql - 创建或修改配置文件以使用密码验证函数
CREATE PROFILE myprofile LIMITPASSWORD_VERIFY_FUNCTION ora12c_verify_function;
- 将配置文件分配给用户
ALTER USER myuser PROFILE myprofile;
在这个例子中,对于使用myprofile配置文件的用户myuser,每当他们尝试设置或更改密码时,都会调用ora12c_verify_function函数来检查密码是否符合复杂性要求。如果密码不符合要求,那么密码更改将失败,并且用户会收到一个错误消息。
如果你想要自定义密码验证逻辑,你可以创建自己的PL/SQL函数,并在创建或修改配置文件时指定该函数的名称。例如:
- 创建自定义密码验证函数
CREATE OR REPLACE FUNCTION my_password_verify_function(p_password VARCHAR2, p_old_password VARCHAR2)RETURN BOOLEAN ISBEGIN- 这里添加自定义的密码验证逻辑RETURN TRUE; -- 或者根据验证结果返回FALSEEND;- 将自定义密码验证函数分配给配置文件
ALTER PROFILE myprofile LIMIT PASSWORD_VERIFY_FUNCTION my_password_verify_function;
在这个自定义函数中,你可以实现任何你想要的密码验证规则,确保用户设置的密码足够强大,以防止未授权访问。
强制执行密码复杂性和验证规则
PASSWORDVERIFYFUNCTION这个函数在数据库的sqlnet.ora文件中指定,或者直接在数据库中作为分配给用户的PASSWORDPROFILE中的一个参数。
以下是如何使用PASSWORDVERIFYFUNCTION的步骤:
- 创建PL/SQL函数:
您需要创建一个PL/SQL函数,负责检查密码的复杂性。这个函数应该返回一个布尔值(TRUE或FALSE)。以下是一个简单的函数示例,它要求密码长度至少为8个字符,并且包含数字和特殊字符:
CREATE OR REPLACE FUNCTION verify_password Complexity(p_password VARCHAR2)RETURN BOOLEAN IS
BEGIN-- 检查密码长度IF LENGTH(p_password) < 8 THENRETURN FALSE;END IF;-- 检查密码是否包含数字IF NOT REGEXP_LIKE(p_password, '[0-9]') THENRETURN FALSE;END IF;-- 检查密码是否包含特殊字符IF NOT REGEXP_LIKE(p_password, '[^a-zA-Z0-9]') THENRETURN FALSE;END IF;-- 如果所有检查都通过,则返回TRUERETURN TRUE;
END verify_password Complexity;
/
- 在
sqlnet.ora文件中指定该函数:
编辑sqlnet.ora文件,添加以下行来指定密码验证函数:PASSWORDVERIFYFUNCTION=verify_password_Complexity - 在密码配置文件中设置:
如果您不想在sqlnet.ora文件中设置,也可以在数据库中为特定的密码配置文件设置该函数:
ALTER PROFILE DEFAULT LIMITPASSWORD_VERIFY_FUNCTION verify_password_Complexity;
这个函数可以实现以下密码复杂性规则:
- 密码长度至少为8个字符
- 密码包含数字
- 密码包含特殊字符
- 密码不包含用户名或用户名的一部分
- 密码不是常见词汇或之前使用过的密码
PASSWORDVERIFYFUNCTION为在Oracle数据库环境中实施自定义密码策略提供了灵活性。然而,Oracle在新版本的数据库中已经弃用了PASSWORDVERIFYFUNCTION的使用,转而推荐使用DBMSMETADATA包进行密码验证。建议您查看您使用的Oracle数据库版本的官方文档,以获取关于密码管理的最新实践。
创建密码验证函数
- 以SYS用户身份登录数据库。
- 创建一个符合以下规范的函数:该函数接受三个参数(用户ID、新密码和旧密码),并返回一个布尔值。
以下是该函数的创建示例:
CREATE OR REPLACE FUNCTION sys.user_provided_passwd_func (userid_parameter IN VARCHAR2(30),password_parameter IN VARCHAR2(30),old_password_parameter IN VARCHAR2(30)
) RETURN BOOLEAN IS
BEGIN-- 在这里实现您的密码验证逻辑-- 例如,以下是一些可能的验证规则:-- 检查新密码长度是否至少为8个字符IF LENGTH(password_parameter) < 8 THENRETURN FALSE;END IF;-- 检查新密码是否与旧密码不同IF password_parameter = old_password_parameter THENRETURN FALSE;END IF;-- 添加更多的密码复杂性检查-- ...-- 如果所有检查都通过,则返回TRUERETURN TRUE;
EXCEPTIONWHEN OTHERS THEN-- 如果发生异常,可以记录日志并返回FALSE-- 例如:DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);RETURN FALSE;
END user_provided_passwd_func;
/
请注意,上述代码只是一个示例,您需要根据自己的密码策略实现具体的验证逻辑。
3. 在创建函数之后,您需要将其与密码配置文件关联起来,以便在用户更改密码时调用该函数:
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION sys.user_provided_passwd_func;
这样,每当用户尝试更改密码时,系统都会调用user_provided_passwd_func函数来验证新密码是否符合您定义的规则。如果函数返回FALSE,则密码更改操作将失败。
相关文章:
管理口令安全和资源(一)
学习目标 Manage passwords using profiles: 使用配置文件(profiles)来管理密码。这意味着你应该能够设置和修改密码策略,比如密码的复杂性、有效期、尝试次数限制等。在Oracle数据库中,配置文件是一组可以应用于所有用户的预定义…...
【Linux】【Vim】vim编辑器的用法
一、vim简介 Vim是一款功能强大且高度可定制的文本编辑器,广泛应用于Linux 和 Unix系统中。 它不仅继承了vi编辑器的所有特性,还增加了许多新的功能,如语法高亮、代码折叠、多级撤销等。 Vim有三种主要的工作模式: 命令模式&am…...
Golang Gin系列-3:Gin Framework的项目结构
在Gin教程的第3篇,我们将讨论如何设置你的项目。这不仅仅是把文件扔得到处都是,而是要对所有东西的位置做出明智的选择。相信我,这些东西很重要。如果你做得对,你的项目会更容易处理。当你以后不再为了找东西或添加新功能而绞尽脑…...
LabVIEW实车四轮轮速信号再现系统
开发了一个基于LabVIEW的实车四轮轮速信号再现系统。该系统解决现有电机驱动传感器成本高、重复性差、真实性差和精度低等问题,提供一种高精度、低成本的轮速信号再现解决方案。 项目背景 ABS轮速传感器在现代汽车安全系统中发挥着至关重要的作用。为保证其准确性和…...
2025.1.16——六、BabySQL 双写绕过|联合注入
题目来源:buuctf [极客大挑战 2019]BabySQL 1 目录 一、打开靶机,分析已知信息 二、手工注入解题 step 1:万能密码 step 2:正常注入,判断字段数 step 3:绕过 step 4:查数据库 step 5&am…...
Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比
先说结论: Swgger 3.0 与Swagger 2.0 区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。 就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原…...
【已解决】git clone报错:Failed to connect to github.com port 443: Timed out
1.问题原因1 报错信息1: fatal: unable to access https://github.com/microsoft/xxx/: Failed to connect to github.com port 443: Timed out 报错信息2: fatal: unable to access https://github.com/xxx/xx/: OpenSSL SSL_read: Connection was …...
Qt 程序 DPI 适配方法归纳
方案1:通过 Windows api 处理 缺点:放大之后界面会模糊。 通过调用api实现 #include <ShellScalingAPI.h> #pragma comment(lib, "Shcore.lib")HRESULT hr SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE);或者使用qt.conf 实现 在…...
AI刷题-小R的随机播放顺序、不同整数的计数问题
目录 一、小R的随机播放顺序 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、 不同整数的计数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终…...
windows 极速安装 Linux (Ubuntu)-- 无需虚拟机
1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…...
【影刀_常规任务计划_API调用】
影刀_常规任务计划 1、在常规任务计划被关闭或者设置了定时任务的情况下(非手动执行),通过API的方式启动任务,任务仍然可以被正常执行。 2、如果在常规任务计划里面应用中填写的参数的话, 如果通过api执行ÿ…...
参数校验 Spring Validation框架
后端参数校验 解决:校验前端传入的参数是否符合预期 1、引入依赖 使用Spring Validation框架 <!-- validation参数校验框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validatio…...
Spring Boot 基础入门指南
Spring Boot 基础入门指南 引言 在当今快速发展的软件行业中,开发者们一直在寻找简化应用程序开发的方法。Spring Boot 应运而生,它旨在帮助开发者快速构建基于Spring框架的应用程序,同时尽可能减少配置工作。本文将带您了解Spring Boot的基…...
doc、pdf转markdown
国外的一个网站可以: Convert A File Word, PDF, JPG Online 这个网站免费的,算是非常厚道了,但是大文件上传多了之后会扛不住 国内的一个网站也不错: TextIn-AI智能文档处理-图像处理技术-大模型加速器-在线免费体验 https://…...
基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day 1
基于 HTML5 Canvas 制作一个精美的 2048 小游戏 在这个快节奏的生活中,简单而富有挑战性的游戏总能给我们带来乐趣。2048 是一款受欢迎的益智游戏,不仅考验智力,还能让人回味无穷。今天,我带领大家将一起学习如何使用 HTML5 Canv…...
知识图谱入门(一)
最近在研究Graph RAG项目,因此对相关内容做个总结,首先从知识图谱开始,供大家参考。 知识图谱是结构化知识表示的一种形式,它将知识组织成一个多关系图,其中节点表示实体,边表示实体之间的关 系。知识图谱…...
springboot项目-基础数据回显
一.基础数据回显说明 微服务项目中由于从服务独立的角度考虑,对数据库做了分库的处理。对于基础数据表来说,各个服务都是需要的。项目中在使用基础数据时,往往是在sql中写连接然后获取基础数据的名称。例: select wi.name,bc.ci…...
LabVIEW实现油浸式变压器自主监测与实时报告
油浸式变压器广泛应用于电力系统中,尤其是在电力传输和分配领域。为了确保变压器的安全、稳定运行,及时监测其工作状态至关重要。传统的变压器监测方法通常依赖人工巡检和定期检查,但这不能及时发现潜在的故障隐患,且效率较低。随…...
K8S 亲和性与反亲和性 深度好文
今天我们来实验 pod 亲和性。官网描述如下: 假设有如下三个节点的 K8S 集群: k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8-alpine docker pull nginx…...
关于php语言api接口开发的流程
确定接口需求:首先明确接口的功能和需求,包括输入参数、输出结果以及接口的业务逻辑。 设计接口路由:根据接口需求,设计具体的接口路由,即URL路径,用于访问接口。 搭建PHP环境:确保你的服务器上…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
