///////// 사용자 관리 /////////
데이터베이스 스키마
- 특정 사용자와 관련된 테이블, 뷰 클러스터, 프로시저 및 패키지 같은 객채의 명명된 모음을 의미
- 사용자 생성시 사용자와 동일한 이름을 가진 스키마가 생성됨
스키마 객체
테이블, 트리거, 제약조건, 인덱스, 뷰, 시퀀스, 동의어 ,데이터베이스 링크
사용자 생성 점검
- 테이블스페이스 및 임시 테이블스페이스
- 테이블스페이스 할당량
- 사용자 생성 및 권한 롤
--------------------
tablespace 생성
Create tablespace PBJ_DAT
DATAFILE '/home/oracle/pbj_dat01.dbf' SIZE 500M
extent management local
create user pbj
identified by pbj
default tablespace PBJ_DAT
temporary tablespace temp
create user pbj2
identified by pbj2
default tablespace PBJ_DAT
temporary tablespace temp
password expire;
create user pbj3
identified by pbj3
default tablespace PBJ_DAT
temporary tablespace temp
quota 100M on PBJ_DAT
password expire;
# password expire 옵션을 넣고 유저 생성시 로그인시 패스워드 변경을 해야함 .
SQL> conn pbj2/pbj2
ERROR:
ORA-28001: the password has expired
Changing password for pbj2
New password:
Retype new password:
############################################
#quota 옵션 추가시
SQL> select * from dba_ts_quotas;
TABLESPACE USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
---------- ---------- ---------- ---------- ---------- ---------- ---
PBJ_DAT PBJ3 0 104857600 0 12800 NO
#quota 값 변경
alter user pbj3
quota 50M on pbj_dat
SQL> select * from dba_ts_quotas;
TABLESPACE USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
---------- ---------- ---------- ---------- ---------- ---------- ---
PBJ_DAT PBJ3 0 52428800 0 6400 NO
# default_tablespace 변경
SQL> select username, default_tablespace ,temporary_tablespace from user_users;
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
---------- ------------------------------ ------------------------------
PBJ3 PBJ_DAT TEMP
alter user pbj3
default tablespace pbj_dat_2
SQL> select username, default_tablespace ,temporary_tablespace from user_users;
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
---------- ------------------------------ ------------------------------
PBJ3 PBJ_DAT_2 TEMP
###################################################
#유저 삭제
SQL> select username, default_tablespace, temporary_tablespace from dba_users
2 where username like 'PBJ%';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
---------- ------------------------------ ------------------------------
PBJ2 PBJ_DAT_2 TEMP
PBJ PBJ_DAT TEMP
PBJ3 PBJ_DAT_2 TEMP
drop user pbj3;
SQL> select username, default_tablespace, temporary_tablespace from dba_users
2 where username like 'PBJ%';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
---------- ------------------------------ ------------------------------
PBJ2 PBJ_DAT_2 TEMP
PBJ PBJ_DAT TEMP
SQL> drop user pbj2;
drop user pbj2
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected
=> 현재 접속중인 사용자는 삭제할 수 없다.
SQL> select username, default_tablespace, temporary_tablespace from dba_users
2 where username like 'PBJ%';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
---------- ------------------------------ ------------------------------
PBJ PBJ_DAT TEMP
############ 연습문제
1. 암호가 CRUSADER인 Bob 사용자를 생성합니다. Bob이 생성하는 모든 객체 및
임시 세그먼트가 시스템 테이블스페이스에 생성되지 않도록 하고 또한 Bob이
로그인하여 1MB 크기까지 객체를 USERS 및 INDX 테이블스페이스에 생성할 수
있도록 하십시오. lab15_01.sql 스크립트를 사용하여 Bob에게 세션 생성 권한
을 부여하십시오.
create user Bob
identified by CRUSADER
quota 1M on USER
quota 1M on INDX
default tablespace USERS
temporary tablesapce TEMP
2. 암호가 MARY인 Emi 사용자를 생성하십시오. Emi가 생성하는 모든 객체 및 정렬
세그먼트가 시스템 테이블스페이스에 생성되지 않도록 하십시오
Create tablespace MARY_TS_DAT
DATAFILE '/home/oracle/ts/mary_ts_dat01.dbf' SIZE 100M
extent management local
create user Emi
identified by MARY
default tablespace MARY_TS_DAT
3 데이터 딕셔너리에서 Bob 및 Emi에 대한 정보를 표시하십시오.
SQL> select USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE from dba_users
2 where username IN ('EMI','BOB');
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
---------- ------------------------------ ------------------------------
EMI MARY_TS_DAT TEMP
BOB USERS TEMP
4 데이터 딕셔너리에서 Bob이 테이블스페이스에서 사용할 수 있는 공간의 양을
표시하십시오
SQL> SELECT * FROM DBA_TS_QUOTAS where username ='BOB';
TABLESPACE USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
---------- ---------- ---------- ---------- ---------- ---------- ---
USERS BOB 0 1048576 0 128 NO
5 a Bob 사용자로 접속하여 임시 테이블스페이스를 변경하십시오. 결과는?
b Bob으로 접속하여 암호를 SAM으로 변경하십시오.
SQL> show user;
USER is "BOB"
SQL> select username, temporary_tablespace from user_users;
USERNAME TEMPORARY_TABLESPACE
---------- ------------------------------
BOB TEMP
SQL> alter user bob temporary tablespace temp2;
alter user bob temporary tablespace temp2
*
ERROR at line 1:
ORA-01031: insufficient privileges
=> 권한이 없음
alter user bob identified by SAM;
6 SYSTEM 사용자로 기본 테이블스페이스에 있는 Bob의 할당량을 제거하십시오.
SQL> select * from dba_ts_quotas where username='BOB';
TABLESPACE USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
---------- ---------- ---------- ---------- ---------- ---------- ---
USERS BOB 0 1048576 0 128 NO
SQL>
SQL>
SQL>
SQL> alter user BOB QUOTA 0 ON USERS;
User altered.
SQL>
SQL>
SQL> select * from dba_ts_quotas where username='BOB';
no rows selected
7 데이터베이스에서 Emi의 계정을 제거하십시오.
SQL> select username from dba_users where username in('EMI','BOB');
USERNAME
----------
BOB
EMI
SQL>
SQL> drop user emi
2 ;
User dropped.
SQL>
SQL>
SQL>
SQL> select username from dba_users where username in('EMI','BOB');
USERNAME
----------
BOB
8 Bob이 암호를 잊어버린 경우 새 암호로 OLINK를 지정하고 다음에 로그온할 때
이 암호를 변경하도록 요청하십시오.
SQL> alter user BOB identified by OLINK password expire;
User altered.
SQL>
SQL>
SQL>
SQL>
SQL> conn BOB/OLINK
ERROR:
ORA-28001: the password has expired
Changing password for BOB
New password:
Retype new password: