SQL> ! | sqlplus를 나가지 않고 OS명령어 사용 |
SQL> @ | 명령어 파일 실행 |
--- P.52 연결 : PROFILE 관리
# Default Password Resource Limits
SQL> @ $ORACLE_HOME/rdbms/admin/utlpwdmg.sql
utlpwdmg.sql | ||
CREATE OR REPLACE FUNCTION verify_function_11G ㄴ 프로시저 생성 : 비밀번호 복잡도 검사 |
||
GRANT EXECUTE ON verify_function_11G TO PUBLIC; ㄴ 모두에게 프로시저 권한 부여 |
||
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LOCK_TIME 1 PASSWORD_VERIFY_FUNCTION verify_function_11G; |
PROFILE 생성 : DEFAULT 암호갱신주기 180일 암호갱신 유효기간 7일 암호 재사용 가능 로그인 시도 10회 가능 실패 초과 시 1일 계정 잠금 암호 복합성 검사 참조 : verify_function_11G |
|
SELECT username, profile FROM dba_users; USERNAME PROFILE ------------------------------ ------------------------------ SYS DEFAULT INSA DEFAULT HR DEFAULT ... SELECT * FROM dba_profiles WHERE profile = 'DEFAULT'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- -------------------------------- -------- -------------------- DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10 DEFAULT PASSWORD_LIFE_TIME PASSWORD 180 DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION_11G DEFAULT PASSWORD_LOCK_TIME PASSWORD 1 DEFAULT PASSWORD_GRACE_TIME PASSWORD 7 ... |
# PROFILE 생성 | ||
CREATE PROFILE insa_profile LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNLIMITED; |
PROFILE 생성 : insa_profile 로그인 시도 3회 가능 접속실패 3회 초과 시 계정 잠금 지속 |
|
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- -------------------------------- -------- -------------------- INSA_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 3 INSA_PROFILE PASSWORD_LIFE_TIME PASSWORD DEFAULT INSA_PROFILE PASSWORD_REUSE_TIME PASSWORD DEFAULT INSA_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT INSA_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT INSA_PROFILE PASSWORD_LOCK_TIME PASSWORD UNLIMITED INSA_PROFILE PASSWORD_GRACE_TIME PASSWORD DEFAULT ... ALTER USER insa PROFILE insa_profile; SELECT username, profile FROM dba_users; USERNAME PROFILE ------------------------------ ------------------------------ SYSTEM DEFAULT INSA INSA_PROFILE INSA_BUHA DEFAULT ... sqlplus insa/비번오타 또는 conn insa/비번오타 x 3회 ORA-01017: invalid username/password; logon denied 4회차부터 정상입력해도 ORA-28000: the account is locked SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA LOCKED 22-DEC-23 INSA_PROFILE ALTER USER insa ACCOUNT UNLOCK; SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA OPEN INSA_PROFILE |
||
# PROFILE 수정 | ||
ALTER PROFILE insa_profile LIMIT FAILED_LOGIN_ATTEMPTS 2 PASSWORD_LOCK_TIME 1/1440; |
PROFILE 수정 : insa_profile 로그인 접속 시도 2회 가능 접속 실패 2회 초과 시 1분 계정 잠금 - 1(일)/24 1시간 |
|
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- -------------------------------- -------- -------------------- INSA_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 2 INSA_PROFILE PASSWORD_LIFE_TIME PASSWORD DEFAULT INSA_PROFILE PASSWORD_REUSE_TIME PASSWORD DEFAULT INSA_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT INSA_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT INSA_PROFILE PASSWORD_LOCK_TIME PASSWORD .0006 INSA_PROFILE PASSWORD_GRACE_TIME PASSWORD DEFAULT ... sqlplus insa/비번오타 또는 conn insa/비번오타 x 2회 SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA LOCKED(TIMED) 22-DEC-23 INSA_PROFILE 1분 후 정상접속 후 SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA OPEN INSA_PROFILE |
||
# PROFILE 삭제 | ||
DROP PROFILE insa_profile CASCADE; ㄴ 권한 회수 포함 SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA OPEN DEFAULT |
# PROFILE 생성 | ||
CREATE PROFILE insa_profile LIMIT PASSWORD_LIFE_TIME 2/1440 PASSWORD_GRACE_TIME 1/1440; |
PROFILE 생성 : insa_profile 2분 후 암호 갱신 만료 후 1분 유예 |
|
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- -------------------------------- -------- -------------------- INSA_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT INSA_PROFILE PASSWORD_LIFE_TIME PASSWORD .0013 INSA_PROFILE PASSWORD_REUSE_TIME PASSWORD DEFAULT INSA_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT INSA_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT INSA_PROFILE PASSWORD_LOCK_TIME PASSWORD DEFAULT INSA_PROFILE PASSWORD_GRACE_TIME PASSWORD .0006 ... ALTER USER insa PROFILE insa_profile; SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA OPEN INSA_PROFILE 2분 후 sqlplus insa/oracle 또는 conn insa/oracle 접속 가능 ORA-28002: the password will expire within 0 days Connected. SQL> show user USER is "INSA" SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA EXPIRED(GRACE) INSA_PROFILE 1분 후 sqlplus insa/oracle 또는 conn insa/oracle 접속 시 ORA-28001: the password has expired Changing password for insa SELECT USERNAME,ACCOUNT_STATUS,LOCK_DATE,PROFILE FROM dba_users WHERE username = 'INSA'; USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA EXPIRED INSA_PROFILE 비번 수정 후 USERNAME ACCOUNT_STATUS LOCK_DATE PROFILE ------------------------------ -------------------------------- --------- --------------- INSA OPEN INSA_PROFILE |
||
# 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; |
PROFILE 수정 : insa_profile 암호갱신주기 180일 암호갱신 유효기간 7일 암호 재사용 가능 로그인 시도 3회 가능 실패 초과 시 계정 잠금 지속 암호 복합성 검사 참조안함 -> 자리수 검증X |
|
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- -------------------------------- -------- -------------------- INSA_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 3 INSA_PROFILE PASSWORD_LIFE_TIME PASSWORD 180 INSA_PROFILE PASSWORD_REUSE_TIME PASSWORD UNLIMITED INSA_PROFILE PASSWORD_REUSE_MAX PASSWORD UNLIMITED INSA_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD NULL INSA_PROFILE PASSWORD_LOCK_TIME PASSWORD UNLIMITED INSA_PROFILE PASSWORD_GRACE_TIME PASSWORD 7 ... ALTER USER insa IDENTIFIED BY oracle; |
||
# PROFILE 수정 | ||
ALTER PROFILE insa_profile LIMIT PASSWORD_REUSE_TIME 2/1440 PASSWORD_REUSE_MAX 1; |
PROFILE 수정 : insa_profile 2분동안 암호 재사용 불가 1회 암호 변경해야 암호 재사용 가능 |
|
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE'; PROFILE RESOURCE_NAME RESOURCE LIMIT --------------- -------------------------------- -------- -------------------- INSA_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 3 INSA_PROFILE PASSWORD_LIFE_TIME PASSWORD 180 INSA_PROFILE PASSWORD_REUSE_TIME PASSWORD .0013 INSA_PROFILE PASSWORD_REUSE_MAX PASSWORD 1 INSA_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD NULL INSA_PROFILE PASSWORD_LOCK_TIME PASSWORD UNLIMITED INSA_PROFILE PASSWORD_GRACE_TIME PASSWORD 7 ... ALTER USER insa IDENTIFIED BY oracle1; User altered. ALTER USER insa IDENTIFIED BY oracle1; ORA-28007: the password cannot be reused ㄴ 2분 이내 암호 재사용 시도 ㄴ 2분 후 다른 비번으로 수정없이 재사용 시도 ALTER USER insa IDENTIFIED BY oracle; User altered. |
# resource 관리
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE';
PROFILE RESOURCE_NAME RESOURCE LIMIT
--------------- -------------------------------- -------- --------------------
INSA_PROFILE COMPOSITE_LIMIT KERNEL DEFAULT
INSA_PROFILE SESSIONS_PER_USER KERNEL DEFAULT
INSA_PROFILE CPU_PER_SESSION KERNEL DEFAULT
INSA_PROFILE CPU_PER_CALL KERNEL DEFAULT
INSA_PROFILE LOGICAL_READS_PER_SESSION KERNEL DEFAULT
INSA_PROFILE LOGICAL_READS_PER_CALL KERNEL DEFAULT
INSA_PROFILE IDLE_TIME KERNEL DEFAULT
INSA_PROFILE CONNECT_TIME KERNEL DEFAULT
INSA_PROFILE PRIVATE_SGA KERNEL DEFAULT
SESSIONS_PER_USER | 동일한 유저로 접속가능한 동시 세션 수 |
IDLE_TIME | 분 단위로 측정한 비활성 시간. 경과 시 자동 KILL |
CONNECT_TIME | 분 단위로 측정한 연결 경과 시간. 경과 시 자동 KILL |
LOGICAL_READS_PER_CALL | 한 문장에서 읽어들일 수 있는 블록의 수 (물리접,논리적) 제한 |
LOGICAL_READS_PER_SESSION | 한 SESSION에서 읽어들일 수 있는 블록의 수 (물리접,논리적) 제한 |
CPU_PER_CALL | 한 문장에서 사용가능한 CPU 시간, 1/100초 단위로 측정한 총 시간을 설정 |
CPU_PER_SESSION | 한 세션에서 사용가능한 CPU 시간, 1/100초 단위로 측정한 총 시간을 설정 |
COMPOSITE_LIMIT | (CPU_PER_SESSION,CONNECT_TIME,LOGICAL_READS_PER_SESSION,PRIVATE_SGA)의 가중합계로 자원 비용을 계산 |
PRIVATE_SGA | 바이트 단위로 측정한 SGA의 전용 공간(shared server 환경(UGA)) |
CPU_PER_CALL 1000 -- 10초
show parameter resource_limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean FALSE
SELECT * FROM v$parameter WHERE name = 'resource_limit';
ISSES_MODIFIABLE : FALSE
ISSYS_MODIFIABLE : IMMEDIATE
...
# 리소스 관리 프로파일 사용
ALTER SYSTEM SET resource_limit = TRUE;
show parameter resource_limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean TRUE
SELECT * FROM v$parameter WHERE name = 'resource_limit';
VALUE : TRUE
...
ALTER PROFILE insa_profile LIMIT
IDLE_TIME 1
CONNECT_TIME 1
SESSIONS_PER_USER UNLIMITED;
SELECT * FROM dba_profiles WHERE profile = 'INSA_PROFILE';
conn insa session 2개 동시 접속 시도
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
** oracle 계정에 연결된 상태에서는 누구나 SYS로 접속이 가능하다.
[oracle@oracle ~]$ sqlplus insa/oracle as sysdba
[oracle@oracle ~]$ sqlplus insa/35634 as sysdba
SQL> show user
USER is "SYS"
# SYS SESSION
GRANT SYSDBA TO insa;
SELECT * FROM user_users;
USERNAME : SYS
INITIAL_RSRC_CONSUMER_GROUP : SYS_GROUP
...
# INSA SESSION
USER_ID | ROLE | USERNAME | INITIAL_RSRC_CONSUMER_GROUP | sqldeveloper 접속 시 설정 |
INSA | DEFAULT | INSA | DEFAULT_CONSUMER_GROUP | |
INSA | SYSDBA | SYS | SYS_GROUP |
SELECT * FROM user_users;
ㄴ 로그인별 참고
# password file 삭제 TEST
[oracle@oracle ~]$ cd $ORACLE_HOME/dbs
[oracle@oracle dbs]$ rm orapwora11g
putty : 서버접속 > new session
[oracle@oracle ~]$ sqlplus / as sysdba
sqldeveloper > 192.168.56.102_insa
> 접속 가능
sqldeveloper > 192.168.56.102_insa_sysdba
ORA-01017: invalid username/password; logon denied
■ password file 생성
sysdba 롤을 받은 사용자에 대한 인증 체크
show parameter instance_name
# orapw<SID>
orapwd file=$ORACLE_HOME/dbs/orapwora11g password=admin
- password=admin : sys 계정의 비밀번호
- 11g부터 패스워드 대소문자를 구분한다.
[oracle@oracle dbs]$ ll
-rw-r-----. 1 oracle oinstall 1536 Dec 22 15:13 orapwora11g
...
sqldeveloper > 192.168.56.102
암호 admin 로 수정 > 접속 가능
192.168.56.102_insa
192.168.56.102_insa_sysdba
ㄴ 암호 수정해도 접속 불가
GRANT SYSDBA TO insa;
ㄴ orapwora11g 에 등록 된다.
192.168.56.102_insa
ㄴ 암호 oracle
192.168.56.102_insa_sysdba
ㄴ 암호 oracle
conn insa/oracle as sysdba
SQL> show user
USER is "SYS"
orapwd file=$ORACLE_HOME/dbs/orapwora11g password=admin ignorecase=n
# ignorecase=n 대소문자 구분한다.
# 패스워드 admind일 경우 admin은 허용되지 않음
orapwd file=$ORACLE_HOME/dbs/orapwora11g password=admin ignorecase=y
# ignorecase=y : 패스워드 대소문자를 구분하지 않겠다.
■ sysdba role 을 이용해서 오라클에 접속할 때 인증 체크는?
1. OS 인증(LOCAL)
- putty로 서버에 직접 접속
- login as: oracle -> DB를 설치한 계정이니 인증 끝 ★ 루트계정 보호 주의
- sqlplus / as sysdba -> 계정없이 접속가능
2. Client(remote) - server 환경에서는 password file을 생성한 인증 체크 방식
- sqldeveloper
SHOW PARAMETER remote_login_passwordfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
EXCLUSIVE : 리스너를 통하여 원격 접속 가능
NONE : 원격접속불가
SELECT * FROM v$parameter WHERE name='remote_login_passwordfile';
VALUE : EXCLUSIVE
ISSES_MODIFIABLE : FALSE
ISSYS_MODIFIABLE : FALSE
ㄴ STATIC PARAMETER
ALTER SYSTEM SET remote_login_passwordfile = exclusive SCOPE=SPFILE;
# password file 로 인증 체크해서 접속한 유저 정보
SELECT * FROM v$pwfile_users;
USERNAME SYSDBA SYSOPER SYSASM
------------------------------ ------ ------- ------
SYS TRUE TRUE FALSE
INSA TRUE FALSE FALSE
# 패스워드 대소문자 구분(11g)
11g부터 패스워드의 대소문자를 구분한다.
SQL> show parameter sec_case_sensitive_logon
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon boolean TRUE
ㄴ TRUE : 대소문자 구분한다.
SELECT * FROM v$parameter WHERE name='sec_case_sensitive_logon';
ISDEFAULT : TRUE
ISSES_MODIFIABLE : FALSE
ㄴ dynamic parameter
ALTER SYSTEM SET sec_case_sensitive_logon = FALSE;
show parameter sec_case_sensitive_logon
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon boolean FALSE
SQL> conn INSA/ORACLE -> 대소문자 구분 안함
Connected.
SQL> SHOW USER
USER is "INSA"
'Oracle 11g > Oracle DB' 카테고리의 다른 글
55 ORACLE Audit, Trigger (1) | 2023.12.27 |
---|---|
54-2 ORACLE Audit (1) | 2023.12.26 |
52 ORACLE Role, Execute, Profile (1) | 2023.12.21 |
51 ORACLE Tablespace, Privilege, Role (1) | 2023.12.20 |
50 ORACLE SGA, Undo, User (0) | 2023.12.19 |