실습8 부터 편집 + 캡처
수업 시작에 앞서...
오늘 수업 내용은 연결되어 있다. 포스팅에 쓰인 순서대로 따라 실행하며 관찰하자.
우리가 자바 첫 수업을 시작할 때도 처음부터 edit 환경에서 실행하지 않고 메모장에 코드 작성, cmd 창에서 실행하며 관찰했다. 데이터베이스 수업도 마찬가지로 당분간은 명령 프롬프트 창에서 실습할 것이다.
(현재 우리 훈련과정은 코로나로 인한 비대면 온라인 수업중이다. 그래서 각자의 개인 pc에 데이터베이스 환경을 설치하는데 제한적인 상황이다. 아마 9/28 오프라인 수업 때까지 이렇게 진행하지 않을까 조심스레 예측해본다..)
1. SQL(Structured Query Language : 구조화 질의 언어. 데이터베이스를 구축하고 사용하기 위한 언어) 은 자바 언어보다 훨씬 간결하고 직관적이기 때문에 몇번만 더 연습하고 익숙해지면 사용하기 쉬울 것이다.
2. 오늘 수업은 admin 파트의 성향이 강하다. 개발자로서 데이터베이스를 배울 때 admin 파트를 안 배워도 업무에 지장이 없다. 그냥 쿼리문만 연습해도 상관 없다. 사실 데이터베이스 자체만 보면 자바보다 훨~~씬 어려운 파트이다. 하지만 우리는 DBA(DataBase Administration, 데이터베이스 관리자) 가 될 것이 아니기 때문에 프로그램 개발 중에 필요한 쿼리문만 배우고 연습해도 충분하다. (우리가 데이터베이스를 사용하면 데이터 조회하는 일이 대부분이다. 만약 데이터베이스 업무가 본인과 잘 맞아서 DBA 가 되려한다 해도, 일단 신입은 DBA 가 될 수 없다. 신입한테 맡길 수 있는 업무가 아니다.)
그럼에도 데이터베이스의 설치와 삭제, 구축 및 sysdba 의 계정 관련 권한 등을 살피는 이유는 다음과 같다.
- 실무에서 개발자로 업무하면 관리자로부터 데이터베이스 계정을 부여받고 업무하게 된다. admin 파트를 알면 업무중에 데이터 접근 권한 등과 관련하여 DBA 와 대화하는 수준이 달라진다. ("저 ○○○ 안돼요~~" → "○○○ 에 접근해야 하는데 계정 접근 권한을 허용해주세요" 등,,) 아무리 쿼리문 잘 짜고 잘 날려도 대화 수준에서 무시당하는 상황이 올 수 있다.
- 실무에서 투입되는 프로젝트에 DB 구축만 담당하는 인력이 있는 경우가 거의 없다. 또한 투입된 프로젝트마다 DB가 구축된 상태의 프로젝트에 투입될 가능성은 정말 드물다. → DB를 구축해야할 일이 생길 것이다.
- 당장 훈련과정의 final project 만 해도 누가 DB를 구축해 주지 않는다. 팀원들끼리 직접 구축하고 권한도 주고 받을 것이며 DB 에 접속이 왜 안되는지 등등 스스로 해결해야 한다.
오라클 서버를 설치하면 오라클 서버와 오라클 클라이언트가 같이 설치된다.
일반적으로 노트북(개인 pc)에 오라클 서버를 설치하지 않고 물리적으로 다른 컴퓨터에 오라클 서버를 설치하며 개인 pc에선느 별도로 오라클 클라이언트만 설치해서 사용한다. 서버는 클라이언트가 언제 접속할 지 모르기 때문에 항상 서비스 되고 있기 때문이다. 오라클 서버가 설치된 컴퓨터의 서비스를 살펴보면 OracleServiceXE / OracleListener 는 항상 서비스가 돌아가는 것을 볼 수 있다.
실행창 호출(윈도우키+R) > services.msc 입력 → 현재 컴퓨터가 서비스하는 목록에서 Oracle 로 시작하는 것을 찾을 수 있다.
캡0
목록 우클릭 > 속성 > 자동(부팅하면서 리소스 소모) → 수동으로 변경하면 서비스가 필요할 때마다 수동으로 사용할 수 있다. (수동 상태에서 서비스가 필요할 땐 목록 우클릭 > 속성 > 시작 눌러서 수동으로 사용)
만약 오라클이 어떠한 이유로(원인불명?) 서비스가 멈췄다면 위와 같은 방법으로 실행시킬 수 있다.
※ 데이터베이스에 관련한 간단한 용어 정리
사물함을 데이터베이스에 비유하면,,
사물함 → 데이터베이스(database)
사물함 한 칸, 한 칸 → 테이블스페이스(tablespace) : 테이블(표)를 보관하는 공간
사물함 한 칸 안에 빼곡히 차 있는 서류 → 테이블(table, 표)
서류-테이블(표) 의 세로줄(항목, 열) → 컬럼(column), 항목 이름 → 컬럼명
테이블(표) 의 가로줄(행) → 1 건의 데이터
오라클 접속
명령 프롬프트 창 열기
실행창 호출(윈도우키+R) > cmd 입력 → (명령 프롬프트 상태)
명령 프롬프트 상태에서 cd\ 엔터 하면 실행하는 위치를 C드라이브(뿌리)로 이동한다.
- cd : change directory // 경로 이동
(오라클은 굳이 C드라이브로 위치하지 않아도 어느 위치에서나 실행할 수 있다. Path 가 등록되었기 때문에 가능한 것이다. 나는 화면 캡처를 위해 C드라이브로 이동했다.)
sqlplus 는 SQL 을 수행하기 위해서 Oracle 에서 제공하는 도구(툴, 유틸리티)이다.
오라클에 접속할 때 실행하는 sqlplus.exe 프로그램은 오라클홈(오라홈) 에 존재한다.
오라클을 설치할 때 오라홈의 경로가 환경변수 Path 에 등록되어 있기 때문에, 명령 프롬프트에서 sqlplus 를 실행할 때 현재 위치를 고려하지 않아도 된다.
- 내 PC > 속성 > 고급 시스템 설정 > 환경 변수 > 시스템 변수 의 'Path' 에 오라클홈(오라홈)의 경로가 등록되어 있다.
오라클 접속
실습1. 사용자 접속 없이 단순히 SQL 프롬프트만 띄우기
C:\>sqlplus/nolog
- 해석 : sqlplus 에 접속한다. 로그인없이(nolog)
sqlplus 에 접속하면 C:\> → SQL> 로 바뀐 것을 확인할 수 있다.
오라클에 접속한 상태에서는 일반적인 DoS 명령어(윈도우 명령어)를 수행할 수 없다. 즉, DoS 명령어를 수행할 수 있는 상태나 환경이 아니다.
윈도우 명령어를 실행하면 에러 난다
실습2. 현재 접속한 사용자 계정 조회
SQL> show user
USER is "" : 로그인 없이 접속한 상태를 나타낸다.
실습3. 첫 번째 관리자 계정인 『sys』로 연결해보기
SQL> connect sys/java006$! as sysdba
- 해석 : 연결한다 계정/비밀번호 sysdba 권한(롤-역할)으로써 (다른 권한에 대해서는 다음 수업 때 살펴볼 것)
- connect (=conn) : 계정 연결 시도
sys 는 최고 관리자 계정이다. 아마 실무에서 sys 계정을 받을 일은 없을거다. 이해를 위한 실습.
Connected. // 연결되었다고 응답받았다.
현재까지의 상황은 로그인 없이 sqlplus 에 접속한 상태에서 sys(첫 번째 관리자 계정) 로 계정을 연결했다.
실습4. sqlplus 종료하기
SQL> exit
sqlplus 를 종료하니 연결끊겼다는 응답과 함께 SQL> → C:\> 로, 윈도우 명령어를 실행할 수 있는 환경으로 바뀌었다.
실습5. sys 계정으로 sqlplus 접속하기 (비교 - 실습1 은 사용자 연결 없이 접속했음.)
C:\>sqlplus sys/java006$! as sysdba
sqlplus 에 접속한 날짜 시간과 오라클 버전을 출력해준다.
실습6. 현재 접속한 사용자 계정 조회 (비교 - 실습2 는 사용자 연결 없이 접속 했을 때 사용자 계정 조회)
SQL> show user
USER is "SYS" : SYS 계정으로 접속한 상태
실습7. 오라클 서버 인스턴스의 상태 조회 (사용가능상태 여부 확인)
SQL> select status from v$instance;
- 해석 : from (v$instance)로부터 status 를 select 한다(선택적으로 조회한다).
select 는 from 과 짝꿍이다. select 구문이 나오면 항상 from 을 먼저 확인하는 습관을 가져야 한다. 왜냐하면 데이터를 찾기 위해서는 어디에서(어떤 표에서) 찾아야 할지 먼저 확인해야하기 때문이다.
앞서 언급한 것처럼, DBA 가 아닌 개발자로서 데이터베이스를 다루면, select 조회를 가장 많이 활용하게 될 것이다.
위 명령 구문은 인스턴스의 상태를 조회하는 구문으로, 전원의 on/off 여부 등 일반적으로 접속의 가능 여부를 확인할 때 사용하는 명령이다.
응답받은 내용은 오라클 서버가 정상적으로 startup 되었음을 의미한다.(정상적으로 작동하고 있다.)
실습8. 일반 사용자 계정인 『hr』 로 연결 시도
SQL> connect hr/lion
계정 『hr』 과 『scott』 은 일반 사용자 계정으로, password 는 각각 lion, tiger 라 암묵적으로 약속되어 있다.
--==>> 출력 결과
/* ----------------------------------------------------------
ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.
-----------------------------------------------------------*/
일반 사용자 계정인 『hr』은 잠겨있는 상태이므로 오라클 서버 접속이 불가능한 상태
hr 계정이 잠겨있다고 출력됨 == hr 이라는 계정이 존재하기는 한다는 걸 알 수 있다.
/* ----------------------------------------------------------
SQL> show user
USER is ""
-----------------------------------------------------------*/
곧바로 현재 로그인 된 계정을 확인해보니 연결되지 않은 상태라고 나온다.(hr 연결시도 전에 sys 로 연결되어있던 상황.) 오라클은 잠긴 계정 hr에 접근하려는 시도가 부적절하다고 판단하고 기존에 connect 된 계정의 연결도 끊어버린다.
오라클은 보안이 굉장히 중요하기 때문에 계정을 생성하면 디폴트 값이 접속 불가능이다 → 계정이 생성된 후에 sys 가 별도로 접속 가능하게 설정해야한다(unlock).
실습9. hr 사용자 계정을 잠금 해제하기
9-1. 관리자 계정(sys)으로 연결
SQL> connect sys/java006$! as sysdba
--==>> Connected.
9-2. 접속된 사용자 계정 확인
SQL> show user
--==>> USER is "SYS"
9-3. 오라클 사용자 계정들의 상태 조회(확인) → sys 로 접속한 상태에서 조회해야 한다.
SQL> set linesize 500
출력되는 길이를 늘려준다. 현재 계정들의 상태를 출력하기 전에, 눈에 보기 쉽게 라인길이를 늘려줬다.
SQL> select username, account_status from dba_users;
dba_users 로부터 username, account_status 를 select 한다.
/* ----------------------------------------------------------
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.
-----------------------------------------------------------*/
9-4. 계정 잠금 / 해제 (sys 권한)
SQL> alter user hr account unlock;
(구조적으로) 변경해라, user 를, 그 중 hr 을, (hr의) account 을 unlock 으로.
※ 변경하는 키워드
1. update : 데이터의 값을 변경할 때 사용한다.
2. alter : 데이터베이스의 구조적인 변경을 수행할 때 사용한다.
실습10. 잠금 해제된 hr 사용자 계정으로 오라클 접속 시도
SQL> conn hr/lion
키워드 connect 는 conn 으로 줄여서 사용할 수 있다.
--==>>
/* ----------------------------------------------------------
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
-----------------------------------------------------------*/
사용자 계정 및 패스워드가 잘못되었기 때문에 로그온이 거부된 상황에서 발생하는 에러이다.
sys 계정으로 account_status 를 확인했을 때 hr 계정이 존재했다. 그럼에도 로그온 실패한 이유는 패스워드(lion)가 잘못됐다고 판단할 수 있다. sys 계정으로 접속하여 hr 의 패스워드를 lion 으로 바꿔주자.
실습11. 계정 정보 변경 (패스워드 설정 변경) → sys 로 접속
11-1. 관리자 계정(sys)으로 연결
SQL> conn sys/java006$! as sysdba
--==>> Connected.
11-2. 접속된 사용자 계정 확인
SQL> show user
--==>> USER is "SYS"
11-3. hr 사용자의 패스워드 변경
SQL> alter user hr identified by lion;
(구조적으로) 변경해라, user 를, 그 중 hr 을, (hr 의) identified by 을 lion 로.
hr 사용자 계정의 패스워드를 lion 으로 설정하겠다.
실습12. hr 사용자 계정으로 접속
SQL> connect hr/lion
SQL> show user
show user 에 대해 "HR" 이라고 응답하는 것을 확인할 수 있다.
※ 참고) 콘솔로 쿼리문을 작성할 때 (쿼리 편집기로 작성하지 않는 상황에서) 세미콜론 『 ; 』을 언제 붙이느냐?
→ 기본적으로 안붙인다.
세미콜론이 필요할 경우에는 콘솔창에서 『다음 행의 숫자』가 붙으며 개행된 상태로 입력을 기다린다. 그 때 세미콜론 ; 을 붙여주면 된다.
세미콜론 ; 없이 엔터 쳤을 때, 숫자 2가 (2행을 의미) 나타나고 커서가 깜박이며 입력을 기다린다. 이때 세미콜론 ; 입력하고 엔터치면 명령이 수행된다.
실습13. hr 계정으로 연결된 상태에서 현재 오라클 서버에 존재하는 사용자 계정 상태에 대한 정보 조회
SQL> select username, account_status from dba_users;
(dba_users) 테이블이 존재하지 않는다... ( * 별표가 찍힌 지점에서 에러가 발생했다고 알려준다.)
hr 이라는 일반 사용자 계정을 통해서는 dba_users 의 조회가 불가능한 것을 확인할 수 있다.
dba_users 는 관리자 계정인 sys 로 조회 가능한 테이블이다.
실습14. hr 사용자 계정에 『sysdba』 권한(롤) 부여하기 → sys 계정으로 부여해 줄 수 있다.
14-1. 관리자 계정(sys)으로 연결
SQL> conn sys/java006$! as sysdba
--==>> Connected.
14-2. 접속한 사용자 확인
SQL> show user
--==>> USER is "SYS"
14-3. 권한 부여
SQL> grant sysdba to hr;
부여한다. sysdba를 hr 에게.
일반 사용자인 hr 에게 sysdba 의 권한을 부여했다.
※ grant : 부여 / revoke : 박탈
권한 : 독립적인 행위의 권한 하나하나
롤(역할) : 여러 권한을 묶은 것
실습15. sysdba 권한 부여 이후, hr 계정으로 접속 및 관찰
15-1. hr 이 as sysdba 로 연결 가능한지 확인하기
SQL> conn hr/lion as sysdba
hr 계정이 sysdba 로서 접속이 되었다.
15-2. 접속한 사용자 계정 확인
SQL> show user
15-3. sysdba 권한을 부여받기 이전에는 불가능했던, 현재 오라클 서버에 존재하는 사용자 계정의 상태 정보 조회하기
SQL> select username, account_status from dba_users;
dba_users 테이블에 대해 정상적인 조회가 가능한 상황
실습16. hr 사용자 계정에 부여한 sysdba 권한 회수(박탈) → (sys 의 권한)
16-1. 관리자 계정(sys)으로 연결
SQL> conn sys/java006$! as sysdba
--==>> Connected.
16-2. 사용자 확인
SQL> show user
--==>> USER is "SYS"
16-3. hr 로 부터 sysdba 권한 회수
SQL> revoke sysdba from hr;
회수한다. sysdba를. hr 로 부터.
권한을 부여할 때는 (계정) '에게' 권한을 부여하므로 to (계정)
권한을 회수할 때는 (계정) 으로 '부터' 회수하므로 from (계정)
실습17. 권한을 박탈당한 hr 계정으로 as sysdba 접속 시도
SQL> conn hr/lion as sysdba
insufficient privileges (권한이 불충분하다.)
권한 박탈 후 hr 은 『as sysdba』로 접속이 불가능한 상태임을 확인할 수 있다.
실습 마무리로 sqlplus 종료
SQL> exit
--==>> C:\>
※ sqlplus 에 연결하며 sys 계정과 잘못된 비밀번호로 접속을 시도해보자. 또는 임의로 작성한 계정과 패스워드로 sqlplus 에 연결을 시도해보자.
C:\>sqlplus asdfasdf/asdfasdf as sysdba
당연히 connect 에 실패해야 정상이지만, 오라클을 설치한 초기에는 마구잡이 계정으로도 연결되는 경우가 있다.(내 컴퓨터도 그랬다.) 이러한 비정상적인 연결은 Administrator 가 ORA_DBA 에 포함되어 있을 경우에 발생한다.
(Administrator : 개인 pc의 윈도우 사용자 계정 / ORA_DBA : 오라클 최고 관리자 권한의 그룹)
데이터베이스에 Administrator 가 함부로 접근할 수 있다는 것은 보안에 취약하다는 의미이다. 따라서 실무에서는 정~~말 특별한 경우가 아니고서는 ORA_DBA 에서 Administrator를 제외시키고 사용해야 한다. (Test DB, Test Server 와 같이 특이한 경우, 아~~주 가끔 Administrator가 ORA_DBA 에 포함되는 경우가 있긴 하지만 거의 없다고 봐도 된다.)
→ ORA_DBA 사용자 그룹에서 윈도우 관리자 계정 제거해야 한다.
실행창 호출(윈도우키+R) > lusrmgr.msc 입력 → (로컬 사용자 및 그룹)
좌측 사용자 클릭 > 현재 pc의 『윈도우 사용자 계정 이름』 우클릭 > 속성 > 소속그룹 탭 > ORA_DBA 제거 > 적용, 확인
ORA_DBA 에서 윈도우 관리자를 제거 후에는 sys 의 계정 및 패스워드가 일치하지 않으면 오라클 서버에 접속할 수 없는 상태가 된다.
C:\>sqlplus asdfasdf/asdfasdf as sysdba
insufficient privileges (권한이 불충분하다.)
아이디, 비밀번호 막 쳐도 sysdba 접속 되지 않는다. (user-name 를 다시 요구한다.)
이 실습 내용은 admin 파트이므로 프로그램 개발자로서 컨트롤할 일은 없다. 상식정도로 관찰만 하고 넘어가자.
※ host 명령어
SQL 접속 중에 DoS 명령 체계로 전환하거나 라인 단위에서 도스 명령어 입력이 가능하다.
유닉스 계열에서는 『host』명령어 뿐만 아니라 『!』도 사용이 가능하다. 하지만, 윈도우 계열에서는 『host』명령어만 사용이 가능하다.
host 상태에서 빠져나갈 경우에는 『exit』명령어를 입력한다.
'자바 풀스택 과정 수업 정리 > 데이터베이스' 카테고리의 다른 글
오라클 1 (2020.09.17) : 데이터베이스, 오라클 설치 및 제거 (0) | 2020.09.18 |
---|
최근댓글