■ 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;
'Data Base > Linux' 카테고리의 다른 글
231221 Linux_role 권한 관리, role 비활성화/활성화 설정 (0) | 2023.12.21 |
---|---|
231220 Linux_user, 객체, 권한, ROLE 관리 (1) | 2023.12.20 |
231219 Linux_block 관리 (0) | 2023.12.19 |
231218 Linux_redo log file 이관작업 (1) | 2023.12.18 |
231218 Linux_데이터 이관 작업 (1) | 2023.12.18 |