Data Base/Linux

231219 Linux_user 관리

잇꼬 2023. 12. 19. 17:23
728x90
반응형
SMALL

■ USER 관리
[sql developer]

# ora1 생성

-- user 생성할 때 기본값으로 설정된다. 기본값을 변경하면 자동으로 변경된다.

create user ora1 identified by oracle;


ex) 

create table test (id number);


test segment 는 어느 tablespace 에 저장되나? 
답변) DEFAULT_TABLESPACE users 에 저장

# ora1.test 생성

create table ora1.test (id number);

select * from dba_users where username = 'ORA1';

유저 생성시 default tablespace가 지정되어 있지 않으면 system tablespace 가 되는 문제점 때문에 10g 버전 부터 데이터베이스 생성시에 데이터 베이스 레벨에서 default tablespace 가 생성되어 있다.

# 데이터베이스 레벨에 기본값으로 설정된 정보 확인

select * from database_properties;

 

select * from dba_tablespaces;


# ora2 user 생성 + tablespace 지정

create user ora2
identified by oracle
default tablespace example -- 지정하는 습관 필요 
temporary tablespace temp -- 기본값(default)으로 설정하면 변경작업(alter)을 진행시 자동으로 변경된다
quota 1m on example;


# 생성 확인.

SELECT * FROM DBA_USERS 
WHERE USERNAME IN ('ORA1', 'ORA2');

 

CREATE TABLESPACE user_tbs
DATAFILE '/u01/app/oracle/oradata/ora11g/user_tbs01.dbf' SIZE 10M AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;


# tempfile 생성 : temp는 user 별로 생성

CREATE TEMPORARY TABLESPACE user_temp
TEMPFILE '/u01/app/oracle/oradata/ora11g/user_temp01.dbf' SIZE 10M AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT MANUAL;


# 생성 확인

SELECT * FROM dba_tablespaces;
SELECT * FROM dba_data_files;
SELECT * FROM dba_temp_files;

 

SELECT * FROM DBA_USERS 
WHERE USERNAME IN ('ORA1', 'ORA2');

 

SELECT * FROM database_properties;



# 기본값 변경

alter database default tablespace user_tbs;
alter database default temporary tablespace user_temp;


# 생성 확인

SELECT * FROM database_properties;
SELECT * FROM DBA_USERS WHERE USERNAME IN ('ORA1', 'ORA2');

 

★ ★ 순서대로 진행
#1) temp 생성 

CREATE TEMPORARY TABLESPACE temp10
TEMPFILE '/u01/app/oracle/oradata/ora11g/temp10.dbf' SIZE 10M AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT MANUAL;


#1-1) temp 생성 후 확인

SELECT * FROM dba_tablespaces;
SELECT * FROM dba_data_files;
SELECT * FROM dba_temp_files;


#2) user 생성
-- tablespace 를 지정해주면 데이터베이스 레벨이 변경 되었더라도 변경 되지 않는다. 

create user ora3
identified by oracle
default tablespace example
temporary tablespace temp10
quota 1m on example;


#2-1) user 생성된 것에 대해 temp 확인

SELECT * FROM DBA_USERS WHERE USERNAME IN ('ORA1', 'ORA2', 'ORA3');


#3) 변경

ALTER DATABASE DEFAULT TABLESPACE users;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

 

#3-1) 변경 확인

SELECT * FROM database_properties;
SELECT * FROM DBA_USERS 
WHERE USERNAME IN ( 'ORA1', -- default_tablespace 을 EXAMPLE으로 생성해 ALTER문으로 변경 작업해도 변경X
                    'ORA2', -- default_tablespace 기본값으로 설정되어 있는 것이 ALTER문으로 변경
                    'ORA3');

 

- tablespace, temporary tablespace 를 기본값으로 지정하는 경우는 select문을 실행하는 users(DDL 실행X)

# 변경 

ALTER DATABASE DEFAULT TABLESPACE user_tbs;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE user_temp;


# 변경 후 확인

SELECT * FROM database_properties;
SELECT * FROM DBA_USERS WHERE USERNAME IN ('ORA1', 'ORA2', 'ORA3');


# 권한 부여 

GRANT CREATE SESSION, CREATE TABLE TO ora1, ora2, ora3;
SELECT * FROM dba_sys_privs WHERE grantee IN ('ORA1', 'ORA2', 'ORA3');

admin_option(컬) : 다른 user에게 grant 할 수 있는지, 보안상 좋지 않으니

# 권한 부여 확인
SQL> conn ora1/oracle
SQL> show user
SQL> select * from session_privs;


SQL> select * from user_users;


# table 생성
- 딕션너리 에만 설계정보만 생성
SQL> create table test (id number, name varchar2(30), day date);

# table 확인
SQL> select table_name, tablespace_name from user_tables;


# insert문 : 오류발생
SQL> insert into test(id, name, day) values(1, 'james', sysdate);


이유? )
USER_TBS tablespace 에 대한 quota 값을 받지 않아서 발생

# quota 값 확인 
SQL> select * from user_ts_quotas;

 

# sys로 로그인
conn / as sysdba

alter user ora1 quota 1m on user_tbs;
SQL> conn / as sysdba
SQL> show user
SQL> alter user ora1 quota 1m on user_tbs;

SQL> select * from dba_ts_quotas where username = 'ORA1';


# ora1 접속
SQL> conn ora1/oracle
SQL> show user
SQL> select * from user_ts_quotas;


# insert문
SQL> insert into test(id, name, day) values(1, 'james', sysdate);
SQL> commit;
SQL> select * from test;


# sys 접속
SQL> conn / as sysdba
SQL> show user
SQL> alter user ora1 quota 1m on example;


# ora1 접속
SQL> conn ora1/oracle
SQL> show user
SQL> create table emp (id number, name varchar2(30), day date)
tablespace example; 
SQL> insert into emp(id, name, day) values(1, 'james', sysdate);
SQL> commit;
SQL> select * from emp;


SQL> select * from user_ts_quotas;

728x90
반응형
LIST