sql >> Databasteknik >  >> RDS >> Oracle

Hur man löser ORA-28000 kontot är låst

Vi stöter ofta på felet ORA-28000 kontot är låst i dagliga aktiviteter. Detta kan hända med både utvecklare och DBA.

Skäl

Detta kan hända på grund av flera orsaker

a. Oracle DBA har avsiktligt låst kontot

alter user <username> account lock;
select status from dba_users where username='&1';

b. Fel lösenord har försökts många gånger vilket resulterat i låsning. Antalet FAILED_LOGIN_ATTEMPTS  kan hittas med hjälp av frågan nedan

select username , profile from dba_users where username='&1';
-----  ------
SCOTT TECH_PW

select * from dba_profiles
where profile='&1' and resource_name='FAILED_LOGIN_ATTEMPTS';

SQL> select RESOURCE_NAME,resource_type,LIMIT from dba_profiles where PROFILE='TECH_PW' ;
RESOURCE_NAME RESOURCE LIMIT
-----------    -------  -----
COMPOSITE_LIMIT KERNEL DEFAULT
SESSIONS_PER_USER KERNEL DEFAULT
CPU_PER_SESSION KERNEL DEFAULT
CPU_PER_CALL KERNEL DEFAULT
LOGICAL_READS_PER_SESSION KERNEL DEFAULT
LOGICAL_READS_PER_CALL KERNEL DEFAULT
IDLE_TIME KERNEL DEFAULT
CONNECT_TIME KERNEL DEFAULT
PRIVATE_SGA KERNEL DEFAULT
FAILED_LOGIN_ATTEMPTS PASSWORD 5
PASSWORD_LIFE_TIME PASSWORD 90
PASSWORD_REUSE_TIME PASSWORD UNLIMITED
PASSWORD_REUSE_MAX PASSWORD 10
PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
PASSWORD_LOCK_TIME PASSWORD DEFAULT
PASSWORD_GRACE_TIME PASSWORD DEFAULT

Default values can be found by querying the default profile
SQL> select RESOURCE_NAME,resource_type,LIMIT from dba_profiles where PROFILE='DEFAULT';
RESOURCE_NAME RESOURCE LIMIT
-------------  -------   ------
COMPOSITE_LIMIT KERNEL UNLIMITED
SESSIONS_PER_USER KERNEL UNLIMITED
CPU_PER_SESSION KERNEL UNLIMITED
CPU_PER_CALL KERNEL UNLIMITED
LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
LOGICAL_READS_PER_CALL KERNEL UNLIMITED
IDLE_TIME KERNEL UNLIMITED
CONNECT_TIME KERNEL UNLIMITED
PRIVATE_SGA KERNEL UNLIMITED
FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
PASSWORD_LIFE_TIME PASSWORD UNLIMITED
PASSWORD_REUSE_TIME PASSWORD UNLIMITED
PASSWORD_REUSE_MAX PASSWORD UNLIMITED
PASSWORD_VERIFY_FUNCTION PASSWORD NULL
PASSWORD_LOCK_TIME PASSWORD UNLIMITED
PASSWORD_GRACE_TIME PASSWORD UNLIMITED

Vi kan också hitta var alla misslyckade inloggningsförsök skedde genom att aktivera granskning

audit session whenever not successful;

select OS_USERNAME,USERNAME,USERHOST,to_char(timestamp,'MM-DD-YYYY HH24:MI:SS'), returncode
from dba_audit_trail
where returncode > 0

Lösning

Om detta inte sker med avsikt kan vi lösa problemet med hjälp av nedanstående metod

(1) Lås upp kontot med kommandot nedan

alter user <username> account unlock;

Innan du kör ovanstående fråga, se till att orsaken till felet är löst. Annars kommer felet att inträffa igen.

(2) Om orsaken till felet är okänd och tills problemet är löst kan vi skapa en annan profil med obegränsat antal FAILED_LOGIN_ATTEMPTS

SQL> CREATE PROFILE TECH_TMP LIMIT
FAILED_LOGIN_ATTEMPTS UNLIMITED
;

Och tilldela den till användaren som har problemet

alter user scott profile TECH_TMP;
alter user scott account unlock;

När orsaken har fastställts och vi vet källan varifrån ogiltiga lösenord kommer, kan vi ändra användarprofilen till den tidigare och släppte den nyskapade profilen

alter user scott profile TECH_PW;
drop profile TECH_TMP;

Hoppas du gillar det här inlägget på ORA-28000 kontot är låst och det kommer att hjälpa dig i dina dagliga aktiviteter. Lämna gärna feedback om det

Relaterade artiklar

ORA-01017:ogiltigt användarnamn/lösenord; inloggning nekad
Hur man loggar in som användare utan att ändra lösenordet i Oracle-databasen
Skapa användare i Oracle
Hur man skapar användare och roller i Oracle-databasen 12c
ORA-00904
ORA-28002
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4003.htm


  1. HikariCP - anslutning är inte tillgänglig

  2. Använder union och order by-klausul i mysql

  3. Hämta raden som har maxvärdet för en kolumn

  4. Vad är ett index i SQL?