안녕하세요 여러분 에보니입니다.
저번 팁에선 주로 디비 어플리케이션 개발자의 입장에서 오라클 접속방법을 알려드렸는데 이번에도
계속해서 클라이언트 적인 입장을 다룰 것이지만 dba 적인 요소도 많이 추가가 될 겁니다.
이번에는 저번팁에서 오라클 클라이언트를 설치할때에 같이 설치된 SQL*Plus를 사용할께요.
이녀석은 어플리케이션이 BDE 와 Net Easy Config Alias 를 사용하여 프로그램적으로 쿼리문을
돌려서 데이타를 가지고 작업하는데 비해 사용자 정보와 앨리어스만을 가지고 직접 서버에 접속하여
쿼리질(?)을 할 수 있습니다.
시작/프로그램/오라클에서 SQL*Plus 를 실행시키거나 도스창으로 가서 오라클 클라이언트가 설치된
패스 (대부분 C:\Oracle\Ora버젼숫자\Bin\ )로 기들어가 이렇게 불러봅니다.
sqlplus system/manager
// 서버가 있는 머신의 도스창에서 연결할 경우
sqlplus system/manager@Net easy Configuration Alias
// 오라클 클라이언트가 설치된 도스창에서 서버로 연결할 경우
클라이언트는 반드시 앨리어스를 붙여야 기들어 감니다.
참고로 system 은 오라클 디비의 최고관리자중 한명의 계정입니다. manager 는 비밀번호에여.
또 한 계정은 SYS 이고 패스워드는 change_on_install
그리고 놀으라고 디폴트로 준 계정도 하나 잇는데 계정은 scott 이고 패스워든 tiger 입니다.
원래 윈도우 모드에서는 처음에 SQL*Plus 를 실행시키면 입력창에 세개를 입력하게 되어있어여.
사용자계정, 비밀번호, 호스트 스트링 이렇게 에디트 박스에 각각 집어 넣는 건데 사용자 계정 에디트
박스에 도스창에서 입력한 것 처럼 쳐도 잘 먹어줌다.
그러니까 사용자 계정이 ebony, 비밀번호가 ebony, 앨리어스가 ebony 이면 윈도우 모드의 사용자 계정
에디트박스던 도스창이든 이렇게 붙여서 기들어갈 수 잇서여. ebony/ebony@ebony 캬캭.
가끔가다 밖에서 일을 하면 게으르고 멍청한 dba들이 위의 계정을 그대로 쓰는 바람에 에보니가
걍 디비의 전권을 쥐게 되는 어처구니 없는 일이 종종 일어나죠. 여러분도 함 시험해보세요
자 이팁의 목적을 대 충 아셧겟죠. 자기가 개발한 디비 어플리케이션이 있는데
이것이 2-tier 를 넘어서 데이타베이스 서버에 자기 어플이 쓸 디비를 만들어 줘야 되는데 dba 가 없거나
있어도 없는 경우(-_-;;) 가 생길때 자기가 직접 서버에 데이타베이스를 비롯한 디비 객체를 만들어야
할 때입니다. 적어도 dba 가 아니더라도 개발자가 알아두면 좋은 내용입니다.
자 그럼 첨에 dba 계정으로 접속합니다. ( 위의 system/manager )
select * from dba_tablespaces;
// 기존 테이블 스페이스보기
지금 이 서버에 어떤 테이블 스페이스들이 있는지 알아봅니다.
select * from all_users;
// 모든 유저들 보기
역시 지금 이 서버에 어떤 유저들이 있는지 알아봅니다.
위의 두 내용은 자기가 만들 테이블 스페이스와 유저이름이 중복되지 않나 확인해야 겟죠.
가끔가다 쿼리질을 하는데 중복에러가 나옴 X 됨니다.
그리고 이왕 보는거 데이타 파일도 함 봅니다.
select file_name, blocks, tablespace_name from dba_data_files;
// 기존의 데이타 파일보기
기존에 어떤것덜이 잇는지 확인햇스면 자기 어플이 사용할 테이블스페이스를 아래 쿼리질로 생성합니다.
create tablespace Mortalpain
datafile 'e:\oracle\oradata\ebony\mortalpain.dbf'
size 50M;
// 테이블 스페이스 생성하기
여기서 datafile 다음의 '' 안의 내용은 주의합니다. 디비 서버가 유닉스,리눅스, 솔라리스 계열은
대문자, 소문자를 구별합니다. 기본적으로 50메가바이트 먹고 들어 가겟다는 말이에여.
이렇게 햇다면 테이블 스페이스 Mortalpain 이 생성됩니다.
테이블 스페이스를 생성한 후 유저를 생성해야 겟죠.
create user ebony.^ㅅ^ identified by ebony
default tablespace Mortalpain
quota 5M on system;
// 유저 생성하기
이렇게 하믄 비밀번호가 identified by 뒤에 있는 ebony 인 ebony.^ㅅ^ 라는 유저가 생김니다.
그리고 이넘이 어떤 클라이언트 앨리어스로 서버에 기들어 오던지 5 MB 정도의 시스템 캐쉬를 사용해서
기본 테이블 스페이스인 Mortalpain 안에서 놀아라 하는 말이죠.
솔직히 팁1에선 데이타베이스 컴포넌트내의 사용자를 dba로 부터 받았는데 이렇게 자기가 만들경우엔
여기서 만든 ebony.^ㅅ^를 사용해야 해여.
자 사용자를 만들면 이넘에게 권한을 줘야겟져...
접속할수 있고 그 테이블 스페이스 내에선 마음대로 놀 수 있게 함니다.
grant connect, dba to ebony.^ㅅ^;
// 유저에게 권한주기
여기서의 connect, dba 는 특수한 롤 권한이라고 하는데 뒤에 나옴니다.
권한까지 부여 햇다믄 이제 미리 준비해간 테이블과 관계를 생성하는 SQL 문을 외부 편집기를 통해
붙여넣고 한 번에 샤샤샥 만들어 버립니다.
외부 편집기를 어케 사용하냐구여 SQL*Plus 메뉴에 보시면 외부 편집기를 지정하는 곳이 있고
미리준비해간 쿼리문들을 외부편집기에 붙여넣고 닫아버리면 외부 편집기의 내용들이 SQL*Plus 의
쿼리 프롬프트에 그대로 뿌려지게 되어여.
아 그런데 여기까지 잘하믄 되는 데 잘못햇다 그러면 당근 고치고 지울건 지워야 되는데...
일단 정보를 봄니다.
select index_name, table_name, tablespace_name from user_table;
select segment_name, tablespace_name, sum(bytes) from user_extents
where segment_type = 'TABLE' group by segment_name, tablespace_name;
// 테이블에 정의된 테이블 스페이스와 그 사용되어진 값알기 (인덱스 포함)
헐 뭐가 잘못되네... 잘못 만들엇네 판단이 생기면
테이블 스페이수를 잘못 만들엇어여...
drop tablespace Mortalpain including contents;
// 테이블 스페이스와 그와 관계된 모든것 삭제하기
위의 쿼리질로 몽땅 날려 버림니다.
테이블 스페이스가 없어졌으니 유저도 지워야져....
drop user ebony.^ㅅ^ cascade;
// 관계된 모든 객체와 함께 유저 삭제
헐 유저정보가 잘못되네... 비밀번호와 테이블 스페이스를 바꿔야지...
alter user ebony.^ㅅ^ identified by ebony
default tablespace Ebony;
// 유저변경
여기까지가 직접 dba 가 되어서 자기 어플이 사용할 디비 객체들을 만드는 활약의 끝입니다.
다음은 알아도 그만 안알아도 그만인 거에여.
유저가 많을 경우 정책 내지는 프로파일을 씀니다. 디비서버도 흔히 잘쓰는 윈도우즈 nt 나 2000 과 같은
네트웍 os 랑 비슷하죠...
create profile ebony_profile LIMIT
FAILED_LOGIN_ATTEMPTS 3 잘못된패스워드로 몇번이나 시도할 수 있는지... 3번후 나가리
PASSWORD_LIFE_TIME 10 이 패스워드 10일만 써라 10일 후 바꿔야돼. 안되믄 계정정지.
PASSWORD_REUSE_TIME 1 정지먹고 하루 후에 쓸 수 있어.
PASSWORD_REUSE_MAX 1000 정지먹고 1000번을 붙을수 있어
PASSWORD_LOCK_TIME 7 3 번 시도하고 나가리 되믄 7일 동안 못쓴다.
PASSWORD_GRACE_TIME 1; 10일동안 쓰고 안바꾸믄 매일마다 바꿔야 돼 세뇌시킨다.
// 프로파일의 생성
참고로 8i 옵션임당... 옵션은 선택과 조합이 가능함다. 단 하나이상은 프로파일에 들어가야 되어여.
자 프로파일을 만들엇스믄 다시함 유저를 만들어여...
create user ebony identified by ebony
default tablespace Mortalpain
quota 5M on system
PASSWORD EXPIRE
PROFILE ebony_profile;
alter user ebony
PASSWORD EXPIRE
PROFILE ebony_profile;
// 접속할때 프로파일 설정대로 유저를 생성 혹은 변경
유저 생성은 위에 나와 잇죠. 바꾸는 것도... 프로파일 버젼 이엇서여...
자 그럼 생성한 유저에게 "시스템" 권한을 줌다.
GRANT create session to ebony WITH ADMIN OPTION;
GRANT create table to ebony WITH ADMIN OPTION;
GRANT create view to ebony;
권한으로 어드민을 때렷스니 기고만장 함다.
다시 접속해서
sqlplus ebony/ebony@ebony
GRANT create table to ebony
캬캬 에보니에게 테이블을 만들게 하자.
REVOKE create table, create view FROM ebony;
권한을 뺏자...
// 시스템 권한의 부여와 철회
이런식으로 맘대로 놀 수 잇서여..
다음도 역시 권한인데 객체 권한을 부여하고 철회하는 거에여.
엔터 프라이즈급의 어플을 작성할때 디비서버차원에서 유저들에게 입력, 조회, 수정, 삭제등의 각각으로
권한을 부여/철회 할 수 있서여.
SELECT, UPDATE, DELETE, INSERT, ALTER, EXECUTE, INDEX, REFERENCES
// 객체권한의 종류
GRANT select on emp TO ebony WITH GRANT OPTION;
GRANT insert(empno, ename), update(ename) on emp TO ebony WITH GRANT OPTION;
GRANT select on emp TO ebony;
GRANT insert(empno, ename), update(ename) on emp TO ebony;
sqlplus system/manager@ebony
REVOKE select ON emp FROM ebony;
// 객체 권한의 생성과 철회
이런식으로 마구 권한을 남발할 수 잇서여...
자 다음은 롤(일종의 권한 정책) 입니다.
첨에도 나와서 대충 이런 것이 잇고 이렇게 만들고 이렇게 바꾸고 이렇게 적용한다만 보여드릴게여...
CONNECT : create session, create table, create index, 등등
RESOURCE: create table 등등
DBA : 데이타베이스의 모든 권한.
SYSOPER : SYSTEM 사용자가 가진 권한.
SYSDBA : SYS 사용자가 가진 권한.
create role role_of_ebony not identified;
create role role_of_ebony identified by ebony
alter role role_of_ebony not identified
alter role role_of_ebony identified by ebony
alter user ebony
default role role_of_ebony ;
all except '[권한]';
none;
// 롤의 종류와 생성, 변경, 부여.
후 너무 긴 글이엇죠... 다음팁은 빌더로 MS-SQL 과 연결하는 것입니다.
|