首页 数据库 mysql教程 从4个方面实战Oracle的密码操作

从4个方面实战Oracle的密码操作

Jun 07, 2016 pm 05:58 PM
or oracle 实战 实践 密码 操作

较好的实践是,Oracle的密码操作通过profile来实现,而资源则是通过资源消费组来控制,profile其实是种限制。 通过profile来控制密码的使用,大抵有四: 1) 密码的历史 在这里,有两个参数:password_reuse_time和password_reuse_max,比较好的实践是,这两

较好的实践是,Oracle的密码操作通过profile来实现,而资源则是通过资源消费组来控制,profile其实是种限制。
通过profile来控制密码的使用,大抵有四:

1) 密码的历史
    在这里,有两个参数:password_reuse_time和password_reuse_max,比较好的实践是,这两个参数当关联起来使用。 如:password_reuse_time=30,password_reuse_max=10,


    用户可以在30天以后重用该密码,要求密码必须被改变超过10次。
    实验:
    会话1:sys
    sys@ORCL> create profile p1 limit password_reuse_time 1/1440 password_reuse_max 1;
    Profile created.
   
    sys@ORCL> alter user scott profile p1;
   
    User altered.
   
    sys@ORCL> alter user scott password expire;
   
    User altered.
   
    sys@ORCL> alter profile p1 limit password_reuse_time 5/1440 password_reuse_max 1;--5分钟后可重用该密码,但这期间必须要被改成其他密码一次
   
    Profile altered.
   
    sys@ORCL> alter user scott password expire;
   
    User altered.
    会话2:scott
    scott@ORCL> exit;
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    [Oracle@localhost ~]$ sqlplus /nolog
   
    SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 3 01:11:09 2012
   
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
   
    idle> conn scott/Oracle
    ERROR:
    ORA-28001: the password has expired
   
   
    Changing password for scott
    New password:                --使用原密码,即Oracle
    Retype new password:
    ERROR:
    ORA-28007: the password cannot be reused
   
   
    Password unchanged
    idle> conn scott/Oracle
    ERROR:
    ORA-28001: the password has expired
   
   
    Changing password for scott
    New password:               --使用新密码,改成think
    Retype new password:
    Password changed
    Connected.
    会话1:sys
    sys@ORCL> alter user scott password expire;

    User altered.
    会话2:scott
    scott@ORCL> exit;
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    [Oracle@localhost ~]$ sqlplus /nolog
   
    SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 3 01:19:04 2012
   
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
   
    idle> conn scott/think
    ERROR:
    ORA-28001: the password has expired
   
   
    Changing password for scott
    New password:             --使用最早的密码,即Oracle
    Retype new password:
    Password changed
    Connected.
    scott@ORCL>
   
2) 密码的登入校验
    在这方面,也有两个参数:
    failed_login_attempts:锁定前允许的最大失败登录次数
    password_lock_time:锁定时间
    实验:
    会话1:sys
    sys@ORCL>删除配置文件 p1 级联;

    个人资料已删除。
   
    sys@ORCL> create profile p1 limit failed_login_attempts 1 password_lock_time 1/1440;--失败一次就被锁,被锁1分钟
   
    个人资料已创建。
   
    sys@ORCL>更改用户 scott 个人资料 p1;
   
    用户已更改。
    会话2:斯科特
    [Oracle@localhost ~]$ sqlplus /nolog

    SQL*Plus:版本 10.2.0.1.0 - 于 2012 年 9 月 3 日星期一 01:42:46 生产
   
    版权所有 (c) 1982、2005,Oracle。  保留所有权利。
   
    空闲>康恩·斯科特/思考
    错误:
    ORA-01017: 用户名/密码无效;登录被拒绝
   
   
    空闲>康恩·斯科特/甲骨文
    错误:
    ORA-28000: 帐户已锁定
   
   
    空闲> conn scott/Oracle  --1 分钟之后
    已连接。

3)密码的生命周期
    同样,这也有两个参数:
    password_life_time: 密码的消耗
    password_grace_time: 宽限时间,特指将达到消耗前的那些时光
    实验:
    会话1:sys
    sys@ORCL>删除配置文件 p1 级联;

    个人资料已删除。
   
    sys@ORCL>创建配置文件 p1 限制password_life_time 2/1440password_grace_time 2/1440;
   
    个人资料已创建。
   
    sys@ORCL>更改用户 scott 个人资料 p1;
   
    用户已更改。
    会话2:斯科特
    [Oracle@localhost ~]$ sqlplus /nolog

    SQL*Plus:版本 10.2.0.1.0 - 于 2012 年 9 月 3 日星期一 01:56:59 投入生产
   
    版权所有 (c) 1982、2005,Oracle。  保留所有权利。
   
    空闲>康恩·斯科特/甲骨文
    错误:
    ORA-28002: 密码将在 0 天内过期
   
   
    已连接。
   
4)密码的复杂性
    在$Oracle_HOME/rdbms/admin/utlpwdmg.sql,有一个密码函数,破解,则可控制密码复杂性
    现在导出函数摘入如下:
    创建或替换函数 verify_function
    (用户名 varchar2,
      密码 varchar2,
      旧密码 varchar2)
      返回布尔值 IS
       n 布尔值;
       m 整数;
       不同的整数;
       isdigit 布尔值;
       ischar 布尔值;
       ispunct 布尔值;
       数字数组 varchar2(20);
       punctarray varchar2(25);
       chararray varchar2(52);
   
    开始
       数字数组:= '0123456789';
       chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
       punctarray:='!"#$%&()``* ,-/:;?_';
   
       -- 检查密码是否与用户名相同
       IF NLS_LOWER(密码) = NLS_LOWER(用户名) THEN
         raise_application_error(-20001, '密码与用户相同或相似');
       结束如果;
   
       -- 检查密码的最小长度
       IF 长度(密码)           raise_application_error(-20002, '密码长度小于4');
       结束如果;
   
       -- 检查密码是否太简单。单词词典可能是
       -- 维护并进行检查,以免出现这些词
       -- 密码太简单了。
       IF NLS_LOWER(password) IN ('欢迎', '数据库', '帐户', '用户', '密码', 'Oracle', '计算机', 'abcd') THEN
          raise_application_error(-20002, '密码太简单');
       结束如果;
   
       -- 检查密码是否至少包含一个字母、一个数字和一个
       -- 标点符号。
       -- 1. 检查数字
       isdigit:=FALSE;
       m := 长度(密码);
       FOR i IN 1..10 循环
          FOR j IN 1..m 循环
             IF substr(password,j,1) = substr(digitarray,i,1) THEN
                isdigit:=TRUE;
                 转到 findchar;
             结束如果;
          结束循环;
       结束循环;
       IF isdigit = FALSE THEN
          raise_application_error(-20003, '密码应至少包含一位数字、一位字符和一位标点符号');
       结束如果;
       -- 2. 检查字符
       >
       ischar:=FALSE;
       FOR i IN 1..length(chararray) 循环
          FOR j IN 1..m 循环
             IF substr(密码,j,1) = substr(chararray,i,1) THEN
                ischar:=TRUE;
                 转到 findpunct;
             结束如果;
          结束循环;
       结束循环;
       IF ischar = FALSE THEN
          raise_application_error(-20003, '密码应至少包含一个
                  数字、一个字符和一个标点');
       结束如果;
       -- 3. 检查标点符号
       >
       ispunct:=FALSE;
       FOR i IN 1..length(punctarray) 循环
          FOR j IN 1..m 循环
             IF substr(password,j,1) = substr(punctarray,i,1) THEN
                ispunct:=TRUE;
                 转到结束搜索;
             结束如果;
          结束循环;
       结束循环;
       IF ispunct = FALSE THEN
          raise_application_error(-20003, '密码应至少包含一个
                  数字、一个字符和一个标点');
       结束如果;
   
       >
       -- 检查密码是否与之前的密码相差至少
       -- 3 个字母
       如果 old_password 不为 NULL 那么
         不同 := 长度(旧密码) - 长度(密码);
   
         IF 绝对值(不同)            IF 长度(密码)              m := 长度(密码);
           其他
             m := 长度(旧密码);
           结束如果;
   
           不同 := abs(不同);
           FOR i IN 1..m 循环
             IF substr(密码,i,1) != substr(old_password,i,1) THEN
               不同 := 不同 1;
             结束如果;
           结束循环;
   
           如果不同              raise_application_error(-20004, '密码应不同于
             至少 3 个字符');
           结束如果;
         结束如果;
       结束如果;
       ——一切都很好;返回真;  
       返回(真);
    结束;
    /
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle如何查表空间大小 oracle如何查表空间大小 Apr 11, 2025 pm 08:15 PM

要查询 Oracle 表空间大小,请遵循以下步骤:确定表空间名称,方法是运行查询:SELECT tablespace_name FROM dba_tablespaces;查询表空间大小,方法是运行查询:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

oracle视图如何加密 oracle视图如何加密 Apr 11, 2025 pm 08:30 PM

Oracle 视图加密允许您加密视图中的数据,从而增强敏感信息安全性。步骤包括:1) 创建主加密密钥 (MEk);2) 创建加密视图,指定要加密的视图和 MEk;3) 授权用户访问加密视图。加密视图工作原理:当用户查询加密视图时,Oracle 使用 MEk 解密数据,确保只有授权用户可以访问可读数据。

oracle如何查看实例名 oracle如何查看实例名 Apr 11, 2025 pm 08:18 PM

在 Oracle 中查看实例名的方法有三种:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通过操作系统的任务管理器、Oracle Enterprise Manager 或检查环境变量 (Linux 上的 ORACLE_SID)。

Oracle安装失败如何卸载 Oracle安装失败如何卸载 Apr 11, 2025 pm 08:24 PM

Oracle 安装失败的卸载方法:关闭 Oracle 服务,删除 Oracle 程序文件和注册表项,卸载 Oracle 环境变量,重新启动计算机。若卸载失败,可使用 Oracle 通用卸载工具手动卸载。

oracle如何获取时间 oracle如何获取时间 Apr 11, 2025 pm 08:09 PM

在 Oracle 中获取时间有以下方法:CURRENT_TIMESTAMP:返回当前系统时间,精确到秒。SYSTIMESTAMP:比 CURRENT_TIMESTAMP 更准确,精确到纳秒。SYSDATE:返回当前系统日期,不含时间部分。TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'): 将当前系统日期和时间转换为特定格式。EXTRACT:从时间值中提取特定部分,如年份、月份或小时。

oracle数据库如何导入 oracle数据库如何导入 Apr 11, 2025 pm 08:06 PM

数据导入方法:1. 使用 SQLLoader 实用程序:准备数据文件、创建控制文件、运行 SQLLoader;2. 使用 IMP/EXP 工具:导出数据、导入数据。提示:1. 大数据集推荐 SQL*Loader;2. 目标表应存在,列定义匹配;3. 导入后需验证数据完整性。

oracle怎么循环创建游标 oracle怎么循环创建游标 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循环可动态创建游标, 步骤为:1. 定义游标类型;2. 创建循环;3. 动态创建游标;4. 执行游标;5. 关闭游标。示例:可循环创建游标,显示前 10 名员工姓名和工资。

oracle如何设置用户 oracle如何设置用户 Apr 11, 2025 pm 08:21 PM

在 Oracle 中创建用户需遵循以下步骤:使用 CREATE USER 语句创建新用户。使用 GRANT 语句授予必要权限。可选:使用 RESOURCE 语句设置配额。配置其他选项,如默认角色和临时表空间。

See all articles