Data Base/Linux

231222 Linux_ password 관리

잇꼬 2023. 12. 22. 16:49
728x90
반응형
SMALL

SQL> @ $ORACLE_HOME/rdbms/admin/utlpwdmg.sql

SQL> ! vi $ORACLE_HOME/rdbms/admin/utlpwdmg.sql

- SQL 에서도 vi 편집기 활용가


[SQL] 

SELECT username, profile FROM dba_users;

SELECT * FROM dba_profiles WHERE PROFILE = 'DEFAULT';


#1) PROFILE 생성

CREATE PROFILE insa_profile LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME UNLIMITED;


#2) 유저에게 생성된 profile 지정

ALTER USER insa PROFILE insa_profile;


#3) 유저에게 지정된 profile 확인

SELECT username, PROFILE FROM dba_users WHERE username = 'INSA';

#3) 계정 잠김 확인 select문

SELECT username, account_status, to_char(lock_date, 'yyyy-mm-dd hh24:mi:ss') 
FROM dba_users 
WHERE username = 'INSA';


#4) 계정풀기

ALTER USER insa ACCOUNT UNLOCK;


#5) 계정풀린 SELECT문

SELECT username, account_status, to_char(lock_date, 'yyyy-mm-dd hh24:mi:ss') 
FROM dba_users 
WHERE username = 'INSA';

#1) PRODUCE 생성

CREATE PROFILE INSA_PROFILE LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME UNLIMITED;


#2) 수정후 확인

SELECT * FROM dba_profiles WHERE PROFILE = 'INSA_PROFILE';


#3) 로그인

- 틀리게 로그인
SQL> conn insa/insa
SQL> conn insa/insa
SQL> conn insa/oracle


#4) 로그인 실패 확인

SELECT username, account_status, to_char(lock_date, 'yyyy-mm-dd hh24:mi:ss') 
FROM dba_users 
WHERE username = 'INSA';


#5) 로그인 확인
SQL> conn insa/oracle

#6) PROFILE 삭제

DROP PROFILE insa_profile CASCADE;


#7) user 정보 확인

SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE';

 


#1) PROFILE 생성

CREATE PROFILE insa_profile LIMIT
PASSWORD_LIFE_TIME 2/1440
PASSWORD_GRACE_TIME 1/1440;

 

#2) PROFILE 생성 확인

select * from dba_profiles where profile = 'INSA_PROFILE';

 

#2-1) USER에게 지정

ALTER USER insa PROFILE insa_profile;

 

#2-2) USER에게 지정 후 확인

SELECT username, profile FROM dba_users;

 

#2-3) USER에게 지정 후 확인

- 계정의 액세스 상태, 상태 시간 정보 확인

SELECT username, account_status, to_char(expiry_date, 'yyyy-mm-dd hh24:mi:ss') 
FROM dba_users 
WHERE username = 'INSA';

 

#4) DBA_PROFILE 확인

select * from dba_profiles where profile = 'INSA_PROFILE';

#1) INSA_PROFILE 수정

ALTER PROFILE insa_profile LIMIT
PASSWORD_LIFE_TIME 180
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL;

 

#2) 수정된 부분 확인

SELECT * FROM dba_profiles where profile = 'INSA_PROFILE';

 

#3) insa/oracle 로 변경

ALTER USER insa IDENTIFIED BY oracle;

#1) 특정한 부분 수정

ALTER PROFILE insa_profile LIMIT
PASSWORD_REUSE_TIME 2/1440 -- 2분 이후 재사용 
-- and 존재
PASSWORD_REUSE_MAX 1; -- 1번은 수정해야 한다.

해석) insa_profile을 수정할 건데,

패스워드를 수정해야 할 경우는 2분 이후에 이전 패스워드와 동일하게 재사용이 가능하되, 이전 패스워드 다른 패스워드로는 1번은 수정해야 가능하다.

 

#2) 수정된 부분 확인

SELECT * FROM dba_profiles where profile = 'INSA_PROFILE';

 

#3) insa/oracle 변경

ALTER USER insa IDENTIFIED BY oracle;
ALTER USER insa IDENTIFIED BY oracle; -- ORA-28007: 비밀번호를 재사용될 수 없습니다

 

#3-1) 다른 패스워드로 변경

 --2분뒤에 이전 패스워드로 변경가능한지 체크

ALTER USER insa IDENTIFIED BY oracle1;

 

#3-2) 패스워드 insa/oracle 로 변경

ALTER USER insa IDENTIFIED BY oracle;

 


#1) 패스워드 함수 변경

ALTER PROFILE insa_profile LIMIT
PASSWORD_VERIFY_FUNCTION verify_function_itwill;

- 기존에 있는 verify_function을 verify_function_itwill 로 명칭 변경 

#1-1) 함수명 변경 

CREATE OR REPLACE FUNCTION verify_function_itwill --함수 생성
(username varchar2, -- 유저명
  password varchar2, -- 새로운 pwd
  old_password varchar2) -- 이전 pwd
  RETURN boolean IS 
   n boolean; -- 참거짓
   m integer; -- 정수값
   differ integer;
   isdigit boolean;
   ischar  boolean;
   ispunct boolean;
   db_name varchar2(40); --문자형
   digitarray varchar2(20);
   punctarray varchar2(25);
   chararray varchar2(52);
   i_char varchar2(10);
   simple_password varchar2(10);
   reverse_user varchar2(32);

BEGIN

 

#1-2) BEGIN 절에서 NLS_LOWER(password) IN () 변경

- 'happy1234' 추가

 -- Check if the password is too simple. A dictionary of words may be
-- maintained and a check may be made so as not to allow the words
-- that are too simple for the password.
IF NLS_LOWER(password) IN ('welcome1', 'database1', 'account1', 'user1234', 'password1', 'oracle123', 'computer1', 'abcdefg1', 'change_on_install', 'happy1234') THEN 
                           --pwd에 () 포함되면
   raise_application_error(-20006, 'Password too simple');
END IF;

 

#1-2) BEGIN 절에서 simple_password 에 회사명 추가

   -- Check if the password is the same as oracle (1-100)
    simple_password := 'itwill'; -- 회사명
    FOR i IN 1..100 LOOP
      i_char := to_char(i);
      if simple_password || i_char = NLS_LOWER(password) THEN
        raise_application_error(-20007, 'Password too simple ');
      END IF;
    END LOOP;

 

#2) 변경된profile 확인

SELECT * FROM dba_profiles where profile = 'INSA_PROFILE';

 

#3) TEST 해보기

- 유저명/패스워드 를 ALTER문으로 변경 

ALTER USER insa IDENTIFIED BY itwill99; -- itwill 포함된 패스워드+8자리부족
ALTER USER insa IDENTIFIED BY james12; -- 문자의 길이
ALTER USER insa IDENTIFIED BY oracle12; -- itwill 포함된 패스워드+8자리 부족
ALTER USER insa IDENTIFIED BY happy1234; -- 흔한 문자로 지정된 패스워드
ALTER USER insa IDENTIFIED BY december; -- 패스워드 8자리
ALTER USER insa IDENTIFIED BY december#@123; -- 지정한 특수문자 없는 문자 사용

ALTER USER insa IDENTIFIED BY itwill12345; --생성가능
728x90
반응형
LIST