admin 管理员组

文章数量: 1184232


2023年12月23日发(作者:ngene软件)

Oracle11g用户被锁定the account is locked的解决办法

用SQL Plus登录时输入:conn scott/tiger

给出提示:

ERROR:

ORA-28000: the account is locked

解决方法:

解决:

(1)以DBA的身份登录另一个用户,输入:

c:> sqlplus sys/test1234 as sysdba

(2)为scott解锁,输入:

alter user scott account unlock;

给出提示:

用户已更改。

SQL> conn scott/tiger

ERROR:

ORA-28001: the password has expired

更改 scott 的口令

新口令:

(3)输入新的密码.

测试、运行程序时,一般使用服务器上的oracle服务,2010年春节后第一天来上班,服务器整体down掉了,所以只好使用本机的oracle服务,是两年装的,连system的密码都不记得了。

首先,开启本地的oracle服务,开始-->设置-->按制面板-->管理工具-->服务 按字母“O”很快找到oracle相关的九个服务,OracleOraDb10g_home1TNSListener 服务一般是开着的,因为开发人员一般都要在自己的机子上使用客户端连接远程的数据库服务器,如果大家没有开就开一下吧。OracleServiceORCL 服务,准确的说应该是OracleServiceSID服务,我的SID是的oracle默认的ORCL,所以就是OracleServiceORCL ,也开启,OK了。

其次,在NET Manager 中配置一个服务命名,记得以前在NET Manager中是会自动配置一个本地的服

务命名的,好像是叫LOCAL,但是在oracle 10中没有,应该不会是我两年前删除了!那就自己配置吧,就那么几步,很简单了,到了最后测试,默认使用scott /tiger 进行测试,出现ora-280000 the account is

locked 提示,换system /manager 也是ora-280000 the account is locked ,账号也锁定,看来得解决这个问题。

解决ora-280000 the account is locked的问题:

开始-->运行-->cmd 进行DOS界面

输入: / as sysdba;

SQL>alert user scott account unlock;

User altered.

sql>commit;

Commit complete.

SQL>conn scott/tiger

ERROR:

ORA-28001:the password has expired

Change password for scott

New passoword:

Retype new password

Password changed

Connect.

SQL>commit;

Commit complete.

这个时候使用scott/新的密码进行net manager测试可以成功,这样就解决了ora-280000 the account is

locked的问题

当使用同样的方法解决system登录时的ora-280000 the account is locked问题时:出现下面问题

SQL> con system/manager

ERROR:

ORA-01017:invalid username/password ;logon denied

Warning :You are no longer connect to ORACLE.

改了密码试了N次,不行,这意味着我忘记了system的密码,呵呵,毕竟两年了。

那下一个问题就是如果system的密码忘了怎么办?

首先,使用上面提到的方法进入sqlplus

SQL> conn /as sysdba

Connect.

SQL> alter user system identified by manager;

User altered.

SQL>commit;

Commit complete.

SQL>conn system/manager;

Connected.

到此这个问题也解决。

其实不管在Net manager中是否配置了本地服务命名,使用SQL plus 都可以连接服务器,只要不写相应的Host String 就可以。

最近两个朋友问我同样的问题,他们发现里面有一个账户总是莫名其妙的被锁住,不知道是什么原因。

我首先想到的是用户default profiles中的failed_login_attempts参数设置问题,然后扩展的问题是这个参数的精确含义及相关值查询。

结果如下:

1. 查询failed_login_attempts参数默认值:

(备注:9i环境中此参数的值为unlimited)

SQL> conn / as sysdba

Connected.

SQL> desc dba_profiles;

Name Null? Type

----------------------------------------- -------- ----------------------------

PROFILE NOT NULL VARCHAR2(30)

RESOURCE_NAME NOT NULL VARCHAR2(32)

RESOURCE_TYPE VARCHAR2(8)

LIMIT VARCHAR2(40)

SQL> select resource_name, limit from dba_profiles where resource_name =

'FAILED_LOGIN_ATTEMPTS';

RESOURCE_NAME LIMIT

-------------------------------- ----------------------------------------

FAILED_LOGIN_ATTEMPTS 10

1 rows selected.

2. 模拟账户被锁现象

(为方便模拟lock现象,修改default profile failed_login_attempts=3 )

a.修改参数failed_login_attempts=3

SQL> conn / as sysdba;

Connected.

SQL>alter profile default limit failed_login_attempts 3;

Profile altered.

b.重现错误登陆

正确登陆

SQL> connecc_view/ecc@devdb1

Connected.

SQL> connecc_view/ecc@devdb1

Connected.

第一次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

Warning: You are no longer connected to.

ORACLE 第二次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

第三次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

连续3次登陆失败后,账户被锁住了

SQL> connecc_view/hh@devdb1

ERROR:

ORA-28000: the account is locked

3. 解锁

SQL> conn / as sysdba

Connected.

SQL>alter user ecc_view account unlock;

User altered.

4. 解决方案

(1) 可以考虑查询应用部署中错误的password或者数据库连接等可能导致错误password的地方,彻底的查询问题所在。

(2) 修改参数failed_login_attempts=unlimited

SQL>alter profile default limit failed_login_attempts unlimited;

Profile altered.

SQL> select resource_name, limit from dba_profiles where resource_name =

'FAILED_LOGIN_ATTEMPTS';

RESOURCE_NAME LIMIT

-------------------------------- ----------------------------------------

FAILED_LOGIN_ATTEMPTS UNLIMITED

5. 扩展知识点及备注说明

(1) Q: FAILED_LOGIN_ATTEMPTS=3 3的含义是什么?是累计失败次数还是连续失败次数?

A: FAILED_LOGIN_ATTEMPTS=3的含义是从第一次登录失败开始计算,连续登陆失败的次数。而不是累计失败的次数。

试验如下:

SQL> connecc_view/ecc@devdb1

Connected.

第一次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

Warning: You are no longer connected to ORACLE.

第二次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

正确登陆

SQL> connecc_view/ecc@devdb1

Connected.

此时不是累计,而是重新计算

第一次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

Warning: You are no longer connected to ORACLE.

第二次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

第三次登陆失败

SQL> connecc_view/hh@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

三次登陆失败后,账户被锁

SQL> connecc_view/ecc@devdb1

ERROR:

ORA-28000: the account is locked

(2) Q: 如何从数据库中查询当前FAILED_LOGIN_ATTEMPTS的值?dba_profiles是限额,并不代表当前值,如果查询当前失败的值怎么查?

A: select NAME,LCOUNT from user$,user$为view dba_users的基表,通常可以查询一下试图对应的基表,oracle可能会隐藏一些参数

初始值为0:

SQL> select NAME,LCOUNT from user$ where name = 'ECC_VIEW';

NAME LCOUNT

------------------------------ ----------

ECC_VIEW 0

错误登陆一次后,值为1

SQL> connecc_view/h@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

SQL> select NAME,LCOUNT from user$ where name = 'ECC_VIEW';

NAME LCOUNT

------------------------------ ----------

ECC_VIEW 1

错误登陆2次后,值为2

SQL> connecc_view/h@devdb1

ERROR:

ORA-01017: invalid username/password; logon denied

SQL> select NAME,LCOUNT from user$ where name = 'ECC_VIEW';

NAME LCOUNT

------------------------------ ----------

ECC_VIEW 2

正确登陆一次后,此值重置为0

SQL> connecc_view/ecc@devdb1

Connected.

SQL> select NAME,LCOUNT from user$ where name = 'ECC_VIEW';

NAME LCOUNT

------------------------------ ----------

ECC_VIEW 0

10g测试数据库


本文标签: 服务 失败 使用 登陆