Oracle用户密码含有特殊字符应当如何处理

在设置Oracle密码时,我们经常会将密码设置的特别复杂(一般由字母、数字和特殊符号组成),值得注意的是,在有特殊符号时,修改密码或着导入导出数据时会遇到很多不必要的麻烦,本文中将会对此情况进行详细的解释和说明:
  注:本文中,将以特殊符号“/”为例。
  Linux环境下,使用Oracle数据库10g
  修改密码
  [oracle@olivenan oracle]$ sqlplus '/as sysdba'
  SQL*Plus: Release 10.2.0.1.0 - Production on Wed May 17 14:33:32 2006
  Copyright (c) 1982, 2005, Oracle. All rights reserved.
  Connected to:
  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  With the Partitioning, OLAP and Data Mining options
  SQL> alter user test identified by aa/aa;
  alter user test identified by aa/aa
  *
  ERROR at line 1:
  ORA-00922: missing or invalid option
  在此使用""
  SQL> alter user test identified by "aa/aa";
  User altered.
  SQL>
  [oracle@olivenan oracle]$ exp test/aa/aa file=test.dmp buffer=65536
  Export: Release 10.2.0.1.0 - Production on Wed May 17 14:32:10 2006
  Copyright (c) 1982, 2005, Oracle. All rights reserved.
  EXP-00004: invalid username or password
  Username:
  此处应该进行转义使用 " "处理密码,使用 ' '处理用户名和密码
  [oracle@olivenan oracle]$ exp 'test/"aa/aa"' file=test.dmp buffer=65536
  Export: Release 10.2.0.1.0 - Production on Wed May 17 14:32:52 2006
  Copyright (c) 1982, 2005, Oracle. All rights reserved.
  Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  With the Partitioning, OLAP and Data Mining options
  Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
  About to export specified users ...
  . exporting pre-schema procedural objects and actions
  ...............
  导出成功。
  
  Windows Xp下,数据库为Oracle9i
  C:\Documents and Settings\w>sqlplus /nolog
  SQL*Plus: Release 9.2.0.1.0 - Production on Wed May 17 14:56:34 2006
  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
  SQL> connect sys/olivenan as sysdba
  Connected.
  SQL> alter user test identified by aa/aa;
  alter user test identified by aa/aa
  *
  ERROR at line 1:
  ORA-00922: missing or invalid option
  此处使用""
  SQL> alter user test identified by "aa/aa";
  User altered.
  SQL>
  Microsoft Windows XP [版本 5.1.2600]
  (C) 版权所有 1985-2001 Microsoft Corp.
  C:\Documents and Settings\w>exp test/aa/aa file=aa.dmp buffer=65536
  Export: Release 9.2.0.1.0 - Production on Wed May 17 14:58:50 2006
  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
  EXP-00004: invalid username or password
  Username:
  Password:
  EXP-00056: ORACLE error 1017 encountered
  ORA-01017: invalid username/password; logon denied
  Username: ^Z^Z
  EXP-00030: Unexpected End-Of-File encountered while reading input
  EXP-00000: Export terminated unsuccessfully
  在此处将使用""" """来处理用户密码
  C:\Documents and Settings\w>exp test/"""aa/aa""" file=aa.dmp buffer=65536
  Export: Release 9.2.0.1.0 - Production on Wed May 17 14:59:10 2006
  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
  Connected to: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
  With the Partitioning, OLAP and Oracle Data Mining options
  JServer Release 9.2.0.1.0 - Production
  Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
  server uses ZHS16GBK character set (possible charset conversion)
  About to export specified users ...
  . exporting pre-schema procedural objects and actions
  . exporting foreign function library names for user test
  . exporting PUBLIC type synonyms
  . exporting private type synonyms
  . exporting object type definitions for user test
  About to export test's objects ...
  . exporting database links
  . exporting sequence numbers
  ........
  至此,导出成功

### 配置Oracle数据库密码策略 #### 设置密码复杂度要求 为了增强安全性,建议启用并自定义Oracle数据库中的密码复杂度验证函数。默认情况下,Oracle提供了`UTL_VERIFY`包来实现基本的密码校验功能。然而,在实际应用中通常会创建更严格的自定义验证逻辑。 对于希望实施高级别的安全控制的企业环境而言,编写自己的PL/SQL程序作为密码验证插件是一个不错的选择。下面给出了一段用于检查新设密钥是否满足特定条件(长度至少8位字符;包含大小写字母、数字以及特殊符号)的简单示例代码: ```plsql CREATE OR REPLACE FUNCTION verify_password Complexity ( username IN VARCHAR2, password IN VARCHAR2, old_password IN VARCHAR2 ) RETURN BOOLEAN IS BEGIN IF LENGTH(password) < 8 THEN RAISE_APPLICATION_ERROR(-20001,'Password too short'); END IF; -- Check for at least one digit, uppercase letter and special character. IF NOT REGEXP_LIKE (password , '^(?=.*\d)(?=.*[A-Z])(?=.*[\W_]).+$') THEN RAISE_APPLICATION_ERROR (-20002 ,'Password does not meet complexity requirements.'); END IF; RETURN(TRUE); END; / ``` 此部分描述了如何通过编程方式强化用户账户的安全属性[^1]。 #### 启用密码锁定机制 当检测到多次连续登录失败尝试时,自动触发账号临时冻结措施能够有效防止暴力破解攻击行为的发生。具体操作可以通过调整参数文件(`spfile` 或者 `init.ora`)内的相应条目完成: - `FAILED_LOGIN_ATTEMPTS`: 定义允许的最大错误次数; - `PASSWORD_LOCK_TIME`: 设定被锁住后的持续时间段(单位为小时),在此期间内无法再次登陆直到超时解除或由DBA手动解锁。 上述设置有助于及时阻止恶意入侵企图,并减少潜在风险暴露窗口期[^2]. #### 实施密码有效期管理 定期更换口令也是维护信息系统整体防护水平不可或缺的一环。为此目的,应当考虑引入如下几个方面考量因素: - `PASSWORD_LIFE_TIME`: 控制单个凭证的有效期限长短,默认值一般设定为90天左右较为合适; - `PASSWORD_GRACE_TIME`: 当接近到期日之前给予一定宽限期提醒使用者尽快更新个人信息; - `PASSWORD_REUSE_MAX`: 规避重复利用旧版凭据的可能性,即规定两次相同内容之间需间隔多久才可重新采用。 以上各项均可以在资源概要文件(profiles)里找到对应选项进行个性化定制化处理. #### 查询现有用户密码状态 有时可能需要查看某个指定用户名下的认证详情,比如确认该对象当前处于何种状况之下——正常可用还是已被禁用?亦或是其他特殊情况呢? 这时就可以借助于内置视图`dba_users`来进行快速检索工作,命令格式如下所示: ```sql SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE, CREATED, PROFILE FROM DBA_USERS WHERE USERNAME='SPECIFIC_USER'; ``` 这段语句可以帮助管理员迅速掌握目标实体的相关信息,以便做出进一步决策安排[^3][^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值