반응형

user Management

Schema?

- 특정 사용자가 생성한 object의 집합을 의미

- user가 생성될 때 관련 schema가 생성

- userschema를 혼용해서 사용하기도 함

Schema Object ( Table, Indexes, Views, Triggers, Constraints, Database links, Synonyms, Stored Procedures, Sequences )

* tablespace는 미리 생성 해놓아야 함!!!!!

 

User 생성하기

1. 사용자를 생성하는 목적을 정리

2. 해당 사용자의 default tablespace를 결정하고 해당 테이블 스페이스를 먼저 생성

CREATE USER user_name IDENTIFIED BY password

DEFAULT TABLESPACE taplespace_name

TEMPORARY TABLESPACE temp_tablespace_name

quota unlimited on tablespace_name

quota 0m on system;

 

-- User 생성 실습

-- SMS 서비스용 user 생성

-- 계정명 : smsuser / passwd: smspwd

-- default tablespace : TS_SMS

-- temporary tablespace : temp_sms

-- quota : ts_sms : unlimited / system : 0m

--1. 테이블 스페이스 생성

CREATE TABLESPACE TS_SMS

datafile '/home/oracle/oradata/testdb/ts_sms.dbf' size 10M;

 

--2. temp 테이블 스페이스 생성

CREATE TEMPORARY TABLESPACE temp_sms

tempfile '/home/oracle/oradata/testdb/temp_sms.dbf' size 10M;

 

--3. user 생성

CREATE USER smsuser IDENTIFIED BY smspwd

DEFAULT TABLESPACE TS_SMS

TEMPORARY TABLESPACE temp_sms

quota unlimited on TS_SMS

quota 0m on system;

 

--선언된 link 확인

select * from dba_db_links;

 

--db link 생성

create public database LINK yang

CONNECT TO scott IDENTIFIED BY "imsi00"

using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)

(HOST=172.16.1.53)(PORT=1521))

(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL2)))';

-- scott계정에 모두 다 들어갈 수 있어서 public으로 선언 잘 안함

 

--DB Link 삭제

drop public database link yang;

 

--yoon 계정의 emp 조회

select * from emp@yang;

 

select * from dba_tables

where table_name='TEST';

 

select * from dba_synonyms

where synonym_name='TEST';

 

create or replace public synonym test for test@yang; -- synonym을 등록

 

select * from test; -- synonym 설정 후 하면 출력됨

 

select * from test@yang;

 

Profile 관리하기

Password 관련

1) FAILED_LOGIN_ATTEMPTS : LOGIN 시도를 실패할 경우 계정을 잠그는데 여기 설정된 횟수

2) PASSWORD_LOCK_TIME : 위에서 계정이 잠기면 며칠 동안 잠글 것 인지 기간을 정하는 파라미터 (일 단위)

-일수와 무관하게 DBAUNLOCK 할 수 있음

3) PASSWORD_LIFE_TIME : 동일한 암호를 며칠간 사용하게 할 것인지 설정하는 파라미터. (일 단위)

이 기간이 지나도 안 바꾸면 다음 로그인 할 때 강제로 바꾸게 프롬프트를 보여줌

4) PASSWORD_GRACE_TIME : 3번 항목에서 만료되어도 이 파라미터에 지정된 값 만큼 더 암호를 변경할 기간을 허용

5) PASSWORD_REUSE_TIME : 동일한 암호를 다시 사용할 수 없도록 설정하는 기간 , 암호를 변경하라고 했는데 사용자가 동일한

암호를 다시 사용하려고 할 수 있기에 같은 암호를 다시 쓸 수 없게 만들어야 할 때 사용하는 파라미터

6) PASSWORD_REUSE_MAX : 동일한 암호를 5번 설정을 피해 재사용을 할 경우 최대 사용 가능한 횟수를 지정하는 파라미터

7) PASSWORD_VERIFY_FUNCTION : 암호를 보다 복잡하게 만들기 위해 특정 함수를 적용시켜 사용자의 암호를 점검 할 수 있음.

ORACLE에서 만들어 둔 기본 함수인 VERIFY_FUNCTION을 사용할 수 있고 사용자가 별도의

함수를 이용할 경우 어떤 조건을 점검하는 가

· 암호는 최소한 4글자 이상 되어야 한다

· 암호는 사용자 계정과 달라야 한다

· 암호는 하나의 특수문자나, 알파벳, 숫자가 포함되어야 한다

· 암호는 이전 암호와 3글자 이상 달라야 한다

-- password 관련 profile 생성하기

-- 다음의 profile을 만드시오. profile이름은 profile_sms

--smsuserprofile_sms를 적용

--조건1 : 로그인 시도 3회 실패 시 계정을 5일 동안 사용 못하게 할 것

--조건2 : 계정의 암호는 15일에 한 번씩 변경하게 할 것

--조건3 : 동일한 암호는 15일 동안 사용 못하게 할 것

--profile 생성

CREATE PROFILE profile_sms LIMIT

FAILED_LOGIN_ATTEMPTS 3

PASSWORD_LOCK_TIME 5

PASSWORD_LIFE_TIME 15

PASSWORD_REUSE_TIME 15;

--user‘s profile 변경

ALTER USER SMSUSER PROFILE profile_sms;

 

리소스 관련 PROFILE

(1) CPU_PER_SESSION : 하나의 세션이 CPU를 연속적으로 사용할 수 없는 최대 시간을 설정합니다. 무한루프 같은 쿼리가 작동되면 혼자 서 CPU를 연속적으로 점유하기 때문에 이 설정을 사용해서 그런 일을 막고자 하는 것입니다. 1/100초 단위입니다.

(2) SESSIONS_PER_USERS : 하나의 사용자 계정으로 몇 명의 사용자가 동시에 접속 할 수 있는지를 설정하는 파라미터입니다

(3) CONNECT_TIME : 하루 동안 DB SERVER에 접속을 허락하는 총 시간을 설정합니다. (단위는 분)

(4) IDLE_TIME : 연속적으로 휴면 시간이 여기 값을 넘으면 접속을 해제 합니다. 예를 들어 IDLE_TIME 5 이렇게 하면 5분 동안 활동이 없는 세션은 강제로 접속이 끊어지게 됩니다 (분 단위)

(5) LOGICAL_READS_PER_SESSION : SESSION에서 사용 가능한 최대 BLOCK 를 지정합니다.

(6) PRIVATE_SGA : MTS / shared server 일 경우 해당 sessionSGA 사용량을 byte 단위로 설정

(7) CPU_PER_CALL : 하나의 Call cpu 점유할 수 있는 시간 1/100초 단위

(8) LOGICAL_READS_PER_CALL : 하나의 call당 읽을 수 있는 block의 개수 지정

 

-- Resource 관련 profile 생성

--profile_sms에 다음의 resource 관련 parameter 값을 수정

-- SYS> alter system set resource_limit=true;

--조건1 : 1명당 연속적으로 CPU를 사용할 수 있는 시간을 10초로 제한할 것

--조건2 : 하루 중 8시간만 DB에 접속 가능하게 할 것

--조건3 : 10분 동안 사용하지 않으면 강제로 접속을 끊을 것

 

ALTER PROFILE PROFILE_SMS LIMIT

CPU_PER_SESSION 1000

CONNECT_TIME 480

IDLE_TIME 10 ;

 

ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; -- 리소스 내용이 적용 되려면 TRUE로 해야함

 

SELECT * FROM DBA_PROFILES

WHERE PROFILE='PROFILE_SMS';

 

Privilege (권한) 관리하기

· SYSTEM 관련 privilege

대 분 류

PRIVILEGE

설 명

INDEX

CREATE ANY INDEX

소유자에 상관없이 모든 테이블에 인덱스를 생성할 수 있는 권한

DROP ANY INDEX

소유자에 상관없이 모든 인덱스를 삭제할 수 있는 권한

ALTER ANY INDEX

소유자에 상관없이 모든 인덱스를 수정할 수 있는 권한

TABLE

CREATE TABLE

자신 소유의 테이블을 생성할 수 있는 권한

CREATE ANY TABLE

소유자에 상관없이 다른 USER 이름으로 테이블을 생성할 수 있는 권한

ALTER ANY TABLE

소유자에 상관없이 모든 테이블의 구조를 수정할 수 있는 권한

DROP ANY TABLE

소유자에 상관 없이 모든 사용자의 테이블을 삭제할 수 있는 권한

UPDATE ANY TABLE

소유자에 상관없이 모든 사용자의 테이블을 업데이트 할 수 있는 권한

DELETE ANY TABLE

소유자에 상관없이 모든 사용자의 테이블의 데이터를 삭제 할 수 있는 권한

INSERT ANY TABLE

소유자에 상관없이 모든 사용자의 테이블에 데이터를 삽입 할 수 있는 권한

SESSION

CREATE SESSION

서버에 접속할 수 있는 권한

ALTER SESSION

접속 상태에서 환경값을 변경할 수 있는 권한

RESTRICTED SESSION

Restricted 모드로 open DB에 접속할 수 있는 권한

TABLESPACE

CREATE TABLESPACE

Tablespace를 만들 수 있는 권한

ALTER TABLESPACE

Tablespace를 수정 할 수 있는 권한

DROP TABLESPACE

Tablespace를 삭제 할 수 있는 권한

UNLIMITED TABLESPACE

Tablesapce 사용용량을 무제한으로 허용하는 권한 즉 quota 옵션 적용을 받지 않게 됨

-- 권한 부여

-- SYSTEM privilege 부여

GRANT CREATE SESSION, CREATE ANY TABLE TO SMSUSER;

-- OBJECT privilege 부여

GRANT SELECT ON SCOTT.EMP TO SMSUSER;

 

--권한확인

--01. 계정별 권한 조회(role 제외)

select * from dba_sys_privs

where grantee='SMSUSER';

 

select * from dba_tab_privs

where 1=1

and grantee='SMSUSER'

and TABLE_NAME='EMP';

 

--02. 계정별 role 조회

select * from dba_role_privs

where grantee='SMSUSER';

 

--03. role에 어떤 권한이 포함되어있는지

select * from dba_sys_privs

where grantee='CONNECT';

 

--04. role에 부여된 SYS 권한 조회

select * from dba_users;

 

ROLE

-- ROLE 생성 하기

create role trole;

create role srole;

 

-- ROLE에 권한 할당 하기

grant create session, create table to trole;

grant select on scott.dept to srole;

 

-- ROLE 할당하기

grant trole, srole to smsuser;

 

1. smsuser에게 부여된 system privilege를 직접 부여된 권한과 role을 통해 부여된 권한을 한번에 조회하도록 쿼리 작성

select grantee, privilege

from dba_sys_privs

where 1=1

and grantee='SMSUSER'

union all

select ROLE, PRIVILEGE

from role_sys_privs

where ROLE IN (select GRANTED_ROLE

from dba_role_privs

where grantee='SMSUSER');

 

2. smsuser에게 부여된 table privilege를 직접 부여된 권한과 role을 통해 부여된 권한을 한 번에 조회하도록

select GRANTEE as "dd", OWNER, TABLE_NAME, PRIVILEGE

from DBA_TAB_PRIVS

where 1=1

and grantee='SMSUSER'

union all

select ROLE, OWNER, TABLE_NAME, PRIVILEGE

from role_tab_privs

where ROLE IN (select GRANTED_ROLE

from dba_role_privs

where grantee='SMSUSER');

 

3. table에 부여된 권한 확인

select * from DBA_TAB_PRIVS

where 1=1

and TABLE_NAME='DEPT';

 

4. table에 부여된 권한 부여 DDL

select 'grant '||PRIVILEGE||' on ' ||OWNER||'.'||TABLE_NAME||' to '||GRANTEE||';'

from DBA_TAB_PRIVS

where 1=1

and TABLE_NAME='DEPT';

 

5. table에 부여된 권한 회수 DDL

select 'grant '||PRIVILEGE||' on ' ||OWNER||'.'||TABLE_NAME||' from '||GRANTEE||';'

from DBA_TAB_PRIVS

where 1=1

and TABLE_NAME='DEPT';

'Study Note > Database' 카테고리의 다른 글

Flashback  (0) 2016.02.02
DBMS JOB & Scheduler  (0) 2016.02.02
Oracle Block  (0) 2016.02.02
Tablespace & Datafiles  (0) 2016.02.02
Redo Log files  (0) 2016.02.02

+ Recent posts