[오라클] 접속 및 구동
--■■■ 오라클 접속 및 구동 ■■■--
--(명령 프롬프트 상태에서...)
--○ 접속된 사용자 없이 단순히 SQL 프롬프트만 띄우도록 하겠다.
C:\>sqlplus/nolog
--==>>
/*
SQL*Plus: Release 11.2.0.2.0 Production on 화 2월 15 17:11:34 2022
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL>
*/
-- ※ 『sqlplus』는 SQL(Structed Query Language, 구조화된 질의어, 쿼리문)을 수행하기 위해 Oracle에서 제공하는
-- 도구(툴, 유틸리티)이다.
-- ※ 『C:\oraclexe\app\oracle\product\11.2.0\server\bin』
-- 경로에 존재하는 『sqlplus.exe』
-- 이미 이 경로가 환경변수 path에 등록되어 있으므로
-- 『C:\>sqlplus』와 같이 명령어 사용이 가능한 상태인 것이다.
SQL> ipconfig
--==>> SP2-0042: unknown command "ipconfig" - rest of line ignored.
SQL> dir
--==>> SP2-0042: unknown command "dir" - rest of line ignored.\
SQL> cls
--==>> SP2-0042: unknown command "cls" - rest of line ignored.
-- ※ 일반적인 도스 명령어(윈도우 명령어)를 수행할 수 없다.
-- (즉, 수행할 수 있는 상태나 환경이 아니다.)
SQL> show user
--==>> USER is ""
--> 현재 접속한 사용자 계정을 조회하는 구문
--○ 첫 번째 관리자 계정인 『sys』로 연결해본다.
C:\Users\mj070>sqlplus sys/java006$ as sysdba
--==>>
/*
SQL*Plus: Release 11.2.0.2.0 Production on 수 2월 16 09:18:10 2022
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
*/
--○ 접속한 사용자 조회
SQL> show user
--==>> USER is "SYS"
--○ 접속 종료
SQL> disconnect
--==>> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
--○ 다시 『sys』로 접속했던 구문 사용
SQL> sqlplus sys/java006$ as sysdba
--==>> SP2-0734: unknown command beginning "sqlplus sy..." - rest of line ignored.
--○ 접속된 사용자 확인
SQL> show user
USER is ""
--○ 다시 『sys』로 접속
SQL> connect sys/java006$ as sysdba
--==>> Connected.
--○ 다시 접속된 사용자 확인
SQL> show user
--==>> USER is "SYS"
--○ 오라클 서버 인스턴스 상태조회(사용가능상태 여부 확인)
-- 전원의 on/off 여부 등 일반적으로 접속의 가능 여부를
-- 확인할 때 사용하는 명령
SQL> select status from v$instance;
--==>>
/*
STATUS
------------------------
OPEN
*/
--> 오라클 서버가 정상적으로 startup 되었음을 의미.
--○ 두 번째로... 일반 사용자 계정인 『hr』로 연결 시도
SQL> connect hr/lion
//--==>>
/*
ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.
*/
--> 일반 사용자 계정인 『hr』은 잠겨있는 상태이므로
-- 오라클 서버 접속이 불가능한 상태
--○ sys 로 연결
SQL> conn sys/java006$ as sysdba
--==>> Connected.
--○ 접속된 사용자 계정 확인
SQL> show user
--==>> USER is "SYS"
--○ 오라클 사용자 계정들의 상태 조회(확인) → sys로 접속한 상태
SQL> set linesize 500
SQL> select username, account_status from dba_users;
--==>>
/*
USERNAME ACCOUNT_STATUS
------------------------------------------------------------ ----------------------------------------------------------------
SYS OPEN
SYSTEM OPEN
ANONYMOUS OPEN
APEX_PUBLIC_USER LOCKED
FLOWS_FILES LOCKED
APEX_040000 LOCKED
OUTLN EXPIRED & LOCKED
DIP EXPIRED & LOCKED
ORACLE_OCM EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
------------------------------------------------------------ ----------------------------------------------------------------
CTXSYS EXPIRED & LOCKED
DBSNMP EXPIRED & LOCKED
XDB EXPIRED & LOCKED
APPQOSSYS EXPIRED & LOCKED
HR EXPIRED & LOCKED
16 rows selected.
*/
--> 현재 hr 계정은 EXPIRED & LOCKED 인 상태
--○ 계정 잠금 / 해제(현재 sys 로 연결된 상태...)
SQL> alter user hr account unlock;
--==>>
User altered.
--○ 잠금 해제된 사용자 계정(hr)으로 오라클 접속 시도
SQL> conn hr/lion
--==>>
/*
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
*/
--> 사용자 계정 및 패스워드가 잘못되었기 때문에 로그온이 거부된 상황
-- 즉, 유효하지 않은 계정 및 패스워드로 접근을 시도했다고 오라클이 안내하고 있는 상황
--○ 계정 정보 변경(패스워드 설정 변경) → sys 로 접속...
SQL> conn sys/java006$ as sysdba
--==>> Connected.
SQL> show user
--==>> USER is "SYS"
SQL> alter user hr identified by lion;
--==>> User altered.
--> hr 계정의 패스워드를 lion으로 설정하겠다.
--○ hr 계정 잠금을 해제하고, 패스워드를 재설정해서
-- 유효한 계정상태로 만든 후...
-- 다시 hr 계정으로 오라클 접속 시도
SQL> conn hr/lion
--==>> Connected.
--○ 접속된 사용자 계정 확인
SQL> show user
--==>> USER is "HR"
--○ 현재 오라클 서버의 사용자 계정 상태에 대한 정보 조회(hr인 상태...)
--==>>
/*
SQL> select username, account_status from dba_users;
*
ERROR at line 1:
ORA-00942: table or view does not exist
*/
// 일반 사용자 계정으로 접속해서 조회해서 에러가 남.
// 야 그런 거 없어~ --> 오라클이 말하는 기본적인 호환
// 관리자는 이 표에 접근할 수 있는 권한이 있으나 일반 사용자는 권한이 없음
--> hr 이라는 일반 사용자 계정을 통해서는
-- dba_users의 조회가 불가능한 상황임을 확인
--○ host 명령어
-- 도스 명령 체계로 전환하거나
-- 라인 단위에서 도스 명령어 입력이 가능하다.
-- 유닉스 계열에서는 『host』명령어 뿐 아니라 『!』도 사용이 가능하다.
-- 하지만, 윈도우 계열에서는 『host』명령어만 사용이 가능하다.
-- host 상태에서 빠져나갈 경우 『exit』명령어를 입력한다.
-- ※ Administrator(mj070(각자 이름계정) → 윈도우 사용자 계정)가
-- ORA_DBA(→ 윈도우 사용자 그룹)에 포함되어 있을 경우
-- 취약한 보안정책으로 인해
-- 실무에서는 정말 특별한 경우가 아니고서는 이를 제외시키고 사용해야 한다.
--==>> ORA_DBA 사용자 그룹에서 윈도우 관리자 계정 제거~!!!
--※ 제거 이후...
-- sys의 계정 및 패스워드가 일치하지 않으면
-- 오라클 서버에 접속할 수 없는 상태가 된다.
--○ hr 사용자 계정에 sysdba 권한(롤) 부여하기 → sys 가...
C:\Users\mj070>sqlplus sys/java006$ as sysdba
--==>>
/*
SQL*Plus: Release 11.2.0.2.0 Production on 수 2월 16 14:19:03 2022
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
*/
SQL> show user
--==>> USER is "SYS"
// 권한 부여 grant
// 권한 박탈 revoke
--○ 권한 부여
SQL> grant sysdba to hr;
--==>> Grant succeeded.
--○ 확인 → hr 계정으로 접속 → as sysdba로 연결
SQL> grant sysdba to hr;
--==>>Grant succeeded.
SQL> conn hr/lion as sysdba
--==>>Connected.
SQL> show user
--==>>USER is "SYS"
SQL> select username, account_status from dba_users;
USERNAME
------------------------------------------------------------
ACCOUNT_STATUS
----------------------------------------------------------------
SYS
OPEN
SYSTEM
OPEN
ANONYMOUS
OPEN
USERNAME
------------------------------------------------------------
ACCOUNT_STATUS
----------------------------------------------------------------
HR
OPEN
APEX_PUBLIC_USER
LOCKED
FLOWS_FILES
LOCKED
USERNAME
------------------------------------------------------------
ACCOUNT_STATUS
----------------------------------------------------------------
APEX_040000
LOCKED
OUTLN
EXPIRED & LOCKED
DIP
EXPIRED & LOCKED
USERNAME
------------------------------------------------------------
ACCOUNT_STATUS
----------------------------------------------------------------
ORACLE_OCM
EXPIRED & LOCKED
XS$NULL
EXPIRED & LOCKED
MDSYS
EXPIRED & LOCKED
USERNAME
------------------------------------------------------------
ACCOUNT_STATUS
----------------------------------------------------------------
CTXSYS
EXPIRED & LOCKED
DBSNMP
EXPIRED & LOCKED
XDB
EXPIRED & LOCKED
USERNAME
------------------------------------------------------------
ACCOUNT_STATUS
----------------------------------------------------------------
APPQOSSYS
EXPIRED & LOCKED
16 rows selected.
--==>> 가능해짐.
--○ 권한 박탈(권한 회수)
SQL> revoke sysdba from hr;
--==>>Revoke succeeded.
SQL> conn hr/lion as sysdba
Connected.
SQL> conn dfafsa/fadsasdfafa as sysdba
Connected.
위 두개가 같음. admin그룹안에 오라클이 있어서 sysdba권한으로 로그인하는
모든 계정이 가능한 것!.
--※ 오라클 서버 구동 / 중지 (admin part는 실무 X, final 프로젝트 구동을
학원 피시로 할거라 알아야함!!)
-- 구동 : startup
-- 중지 : shutdown[immediate] → 즉각적으로 멈춰야할 때가 많기때문에
--○ 일반 사용자 계정 hr 로 오라클 서버 중지 명령 시도
SQL> conn hr/lion
--==>>Connected.
SQL> show user
--==>>USER is "HR"
(sysdba 권한 박탈당한 상태.....)
SQL> shutdown
--==>>ORA-01031: insufficient privileges
-- (권한 불충분 에러)
--> 일반 사용자 계정으로는 오라클 서버를 중지시킬 수 없다.
--○ sys로 접속하여 오라클 서버 중지 명령 시도
SQL> conn sys/java006$ as sysdba ▶ sysdba 권한을 가진 sys에 연결
--==>>Connected.
SQL> show user ▶ 현재 접속 유저 확인
--==>>USER is "SYS"
SQL> shutdown ▶ 서버 중지 명령
--==>>
/*
Database closed. ▷ 데이터베이스 닫힘
Database dismounted. ▷ 데이터베이스 마운트 해제
ORACLE instance shut down. ▷ 오라클 인스턴스 셧다운
*/
-- ※ 오라클 서버(startup)를 시작 / 중지(shutdown)하는 명령은
-- 『as sysdba』 또는 『as sysoper』 로 연결했을 때만 가능하다.
-- ------------ ------------
-- 관리자 운영자
--○ hr 사용자 계정에 『sysoper』 권한 부여하기 → sys 가... ▶ grant와 revoke!!! 권한 주기 박탈하기!!1
SQL> conn sys/java006$ as sysdba
--==>> Connected.
SQL> show user
--==>> USER is "SYS"
SQL> grant sysoper to hr;
--==>> Grant succeeded.
--○ sysoper 권한을 가진 hr 계정으로 오라클 서버 접속 및
-- 서버 중지 명령 수행
SQL> conn hr/lion as sysoper
--==>> Connected.
SQL> show user
--==>> USER is "PUBLIC" ▶ 접근 제어 지시자 ㄴㄴ 공공된 운영과 관련해서 배치된 것
SQL> shutdown immediate
--==>>
/*
Database closed.
Database dismounted.
ORACLE instance shut down.
*/
--○ 다시 오라클 서버 구동
SQL> startup
--==>>
/*
ORACLE instance started.
Database mounted.
Database opened.
*/
--○ sysoper 권한을 가진 hr 계정으로
-- 현재 오라클 서버에 존재하고 있는 사용자 계정 정보 상태 조회
SQL> select username, account_status from dba_users;
--==>>
/*
select username, account_status from dba_users
*
ERROR at line 1:
ORA-00942: table or view does not exist
*/
--■■■ 오라클 서버 연결 모드의 3가지 방법 ■■■--
-- 1. as sysdba
--> as sysdba로 연결하면 오라클 서버의 관리자로 연결되는 것이다.
-- user 명은 sys 로 확인된다.
-- 오라클 서버 관리자로 연결되는 것이기 때문에
-- 오라클에서 제공하는 모든 기능을 전부 활용할 수 있다.
-- 오라클 서버가 startup 또는 shutdown 되어도 연결이 가능하다.
-- → 일반적인 연결은 『conn 계정/패스워드 as sysdba』 형태로 연결하게 된다.
-- 2. as sysoper
--> as sysoper로 연결하면 오라클 서버의 운영자로 연결되는 것이다.
-- user 명은 public 으로 확인된다.
-- 사용자 계정 정보 테이블에 접근하는 것은 불가능하다.
-- 오라클 서버의 구동 및 중지 명령 수행이 가능하다.
-- 오라클 서버가 startup 또는 shutdown 되어도 연결이 가능하다.
-- → 일반적인 연결은 『conn 계정/패스워드 as sysoper』 형태로 연결하게 된다.
-- 3. normal
--> 오라클 서버에 존재하는 일반적인 사용자로 연결되는 것이다.
-- 오라클 서버가 구동 중인 상태에서만 연결이 가능하고
-- 오라클 서버가 구동 중지 상태일 경우 연결이 불가능 하다.
-- 관리자가 부여해 준 권한(또는 롤)을 통해서만 사용 가능하다.
-- → 일반적인 연결은 『conn 계정/패스워드』 형태로 연결하게 된다.
▶ 실무에서는 계정/비번 형태로 작성할 경우 비번 유출의 위험이 있어서
conn hr 까지 치고 엔터 누르면 패스워드 입력가능
▶ 만약 오라클 구동 중 안 된다면
응급처치 -> 서비스 창 열고
-> 오라클 서비스xe, 어쩌구 listener 마우스 우클릭 -> 다시 시작 또는 시작