1. 为什么你的Oracle数据库密码总是“太简单”?
不知道你有没有遇到过这种情况,公司安全部门来检查,扫一眼数据库用户密码策略,直接就给打了个“高危”。或者,你新创建的数据库用户,随手设了个“123456”,系统居然也让你通过了,心里是不是有点发毛?我刚开始做DBA那会儿,也总觉得Oracle数据库的密码管理有点“松”,默认情况下,它对密码几乎没什么要求,这在实际生产环境里,简直就是个敞开的门。
其实,Oracle数据库本身是提供了一套非常强大的密码安全加固工具的,核心就是密码验证函数和密码复杂性策略。简单来说,你可以给数据库定一套规矩,比如密码必须至少8位、必须包含大小写字母和数字、不能和用户名相同、不能是过去用过的密码等等。这套规矩,就是通过一个叫做 verify_function 的函数来实现的。而启用和配置这套规矩的“钥匙”,是一个官方提供的脚本文件——utlpwdmg.sql。
很多朋友,包括我早期,卡就卡在找不到这把“钥匙”,或者找到了却不知道怎么用。网上有些教程只给个命令,但没告诉你为什么,环境一变就抓瞎。这篇文章,我就把我这些年踩过的坑、总结出来的实战经验,从原理到操作,从找文件到避坑,给你掰开揉碎了讲清楚。目标就一个:让你看完就能在自己的库上,稳稳当当地把密码复杂性要求给配起来,告别“弱密码”警告。
2. 核心原理:verify_function与DEFAULT概要文件
在动手之前,咱们先花几分钟搞清楚Oracle是怎么管理密码规则的。这能帮你理解后面每一步操作的意义,出了问题也知道去哪儿找。
2.1 什么是密码验证函数(verify_function)?
你可以把 verify_function 想象成数据库门口的“安检员”。每当有用户要创建新密码或者修改旧密码时,这个“安检员”就会跳出来,拿着你定好的规则手册(也就是函数里的代码),一条一条地检查新密码是否合格。
这个函数本身是Oracle用PL/SQL写的一段程序。它的检查逻辑通常包括:
- 长度检查:密码不能短于某个值(比如8位)。
- 复杂度检查:密码里是否同时有字母和数字?是否包含大小写?
- 避免常见弱密码:密码不能和用户名一样,不能是像“password”、“oracle”这种简单单词。
- 密码历史:新密码不能和最近几次用过的密码重复。
默认情况下,这个“安检员”是缺席的。也就是说,没有这个函数,或者这个函数没有被启用,数据库对密码就“不设防”。
2.2 策略的载体:DEFAULT概要文件(PROFILE)
光有“安检员”还不行,得给他安排工作岗位。在Oracle里,这个“工作岗位”就是概要文件(PROFILE)。
每个数据库用户都必须关联一个概要文件。其中有一个非常特殊的、叫做 DEFAULT 的概要文件。如果你没有特意给用户指定其他概要文件,所有用户都会自动使用这个 DEFAULT 概要文件。它就像公司的“员工通用行为规范”。
密码验证函数就是被绑定在概要文件上的一个属性。我们要做的,就是把我们创建好的 verify_function “安检员”,指派给 DEFAULT 这个“通用规范”。这样一来,所有使用默认规范的用户,在修改密码时,都会受到我们制定的密码规则约束。
一个关键点:utlpwdmg.sql 这个脚本,干的就是两件核心事:1. 创建 verify_function 函数;2. 自动将这个函数分配给 DEFAULT 概要文件。所以运行它,是一步到位的操作。
3. 实战第一步:定位关键脚本 utlpwdmg.sql
这是整个操作中最容易卡住的第一步。因为Oracle的安装路径五花八门,尤其是在Windows和Linux上,差异很大。别慌,我教你几种万无一失的查找方法。
3.1 在服务器上直接搜索(最推荐)
不管系统多复杂,用操作系统的搜索功能是最直接的。我强烈建议你先试试这个方法。
-
在Windows服务器上:
- 打开“我的电脑”或“文件资源管理器”。
- 进入你的Oracle安装盘符(通常是C盘或D盘)。
- 在右上角的搜索框里,直接输入
utlpwdmg.sql。 - 等待搜索结果。它很可能出现在类似
C:\app\oracle\product\11.2.0\server\rdbms\admin\这样的路径下。注意,11.2.0这个版本号会根据你的实际安装版本变化。
-
在Linux/Unix服务器上: 打开终端,使用
find命令进行全盘或限定范围的搜索:# 在 /u01/app 目录下查找(Oracle常见安装目录) find /u01/app -name "utlpwdmg.sql" 2>/d


433

被折叠的 条评论
为什么被折叠?



