C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[93] DB Programming Tip 2 --- How to use SQL*Plus in Oracle && 깜짝 dba
에보니.^ㅅ^ [ebony] 8151 읽음    2001-05-31 17:00
안녕하세요 여러분 에보니입니다.

저번 팁에선 주로 디비 어플리케이션 개발자의 입장에서 오라클 접속방법을 알려드렸는데 이번에도

계속해서 클라이언트 적인 입장을 다룰 것이지만 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 과 연결하는 것입니다.

+ -

관련 글 리스트
93 DB Programming Tip 2 --- How to use SQL*Plus in Oracle && 깜짝 dba 에보니.^ㅅ^ 8151 2001/05/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.