ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 계정생성과 관리
    Oracle-diary/DCL 2020. 1. 29. 19:05
    요약
     
    계정 생성 CREATE USER 유저이름 IDENTIFIED BY 패스워드
    권한 종류 system privilege & object privilege
    권한부여&회수 grant 권한 (on 테이블명) to 사용자명 ,revoke 권한 (on object명) from 사용자명
    DCL정의 권한에 대해 부여&회수하는 명령어
    타계정 UPDATE update 소유주.테이블명
    PASSWORD EXPIRE password expire 절
    계정 lock alter user 유저명 account lock;
    생성된 계정과 데이터의 상관관계 계정 지우면 계정에서 만든 연관된 data 전부 삭제된다.
    -------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------
    계정 생성
     
     
     
    CREATE USER 유저이름 <-관리자 권한이다. CONN system/oracle 접속 후 부여 하기
    IDENTIFIED BY 패스워드
     
     
    하지만 권한을 설정해 주어야 이용할수있다 .
    위의 것은 접속 권한만 준것이다.
    ------------------------------------------------------------------------------------------------------------------------------------
     
    권한의 종류?
     
    system privilege : db전체에 영향을 주는 권한, 모든권한 ex) system 관리자
    object privilege : 특정 object(ex)table)에만 주어지는 권한 ex) 생성자
     
    ------------------------------------------------------------------------------------------------------------------------------------
    *DCL(DATA CONTROL LANGUAGE) :권한부여,회수에 대해 실행하는 명령이다 .
    DCL은 DDL과 같이 AUTOCOMMIT된다.
    부여하는 명령 GRANT 권한 TO 사용자명 ;
    grant 권한 on object명 to 사용자명 (object privilege)
     
     
     
    회수하는 명령 REVOKE 권한 FROM 사용자명;
    revoke 권한 on object명 from 사용자명;
    ex) grant connect,resource <-접속,자원에 대한 권한을 부여한다 .
     
    하지만 select*from emp하면 나오지 않는데 왜그럴까?
     
     
    TABLE형엔 SCHEMA라는것이 와야한다.
     
    SELECT * FROM SCHEMA EMP;
    DB에서 OBJECT를 저장할 수 있는 DOMAIN을 말한다.
     
     
    SCHEMA의 이름은 사용자의 이름과 같다.
     
    => SELECT*FROM SCOTT.EMP; <-자기것이라면 생략 가능.
     
     
     
    그래도 안나오는데 왜그럴까????
     
    보안때문에 존재하지 않는것처럼 나오게 된다 . 그래서 특정 테이블의 소유주에게 권한 허락을 받아야 한다.
    (관리자도 권한주기가 가능하다.)
     
    grant 권한 on object명 to 사용자명 (object privilege)
    SQL> conn scott/tiger
    연결되었습니다.
    SQL> grant select on emp to user1;
     
    ------------------------------------------------------------------------------------------------------------------
    update 하기
    먼저 권한을 부여받지 못했기 때문에 나오는 오류
    SQL> update scott.emp
    2 set sal=100;
    update scott.emp
    *
    1행에 오류:
    ORA-01031: 권한이 불충분합니다.
     
     
    그래서
     
    SQL> grant update on emp to user1; <-SCOTT으로 접속해 권한을 부여하고나서
     
     
    SQL> UPDATE SCOTT.EMP <-다시 접속해 update를 실행하면
    2 SET SAL=100;
     
    원하는 정보가 나온다.
    ------------------------------------------------------------------------------------------------------------------
    권한 회수하기
    revoke 권한 on 테이블 or view from 사용자
    SQL> revoke select,update on emp from user1; <-특정 객체급 권한 회수
     
    권한이 취소되었습니다.
     
    SQL> revoke connect from user1;
    SQL> revoke resource from user1; <-관리자급권한 회수
     
     
     
    ----------------------------------------------------------------------------------------------------------------------
    PASSWORD EXPIRE 기능
     
    사용자가 임시 비밀번호를 변경하도록 하는 것.
    비밀번호를 관리자가 부여해도 그대로 쓰지않고 일부러 만료가 가까운
    비밀번호를 만들어주어 사용자가 자신만의 비밀번호를 설정하도록
     
     
    SQL> CONNECT USER2/TIGER
    ERROR:
    ORA-28001: the password has expired
     
     
    SQL> CREATE USER USER2
    2 IDENTIFIED BY TIGER
    3 PASSWORD EXPIRE <- PASSWOR EXPIRE기능에 대한 명령어
    4 ACCOUNT UNLOCK;
     
    사용자가 생성되었습니다.
     
    SQL> GRANT CONNECT,RESOURCE TO USER2;
     
     
    SQL> CONNECT USER2/TIGER
    ERROR:
    ORA-28001: the password has expired
     
     
    USER2에 대한 비밀번호를 변경합니다.
    새 비밀번호:
    새 비밀번호 다시 입력:
    비밀번호가 변경되었습니다.
    연결되었습니다.
     
     
    변경 가능한 사용자 SYSTEM,SYS,본인
     
    ALTER USER USER2
    IDENTIFIED BY TIGER
     
    SQL> PASSWORD <-본인은 PASSWORD 키워드로도 바꿀 수있다.
    USER2에 대한 비밀번호를 변경합니다.
    이전 비밀번호:
    새 비밀번호:
    새 비밀번호 다시 입력:
    비밀번호가 변경되었습니다.
     
     
     
    ---------------------------------------------------------------------------------------------------------------------------------
     
    계정과 생성된 데이터의 상관관계
    ex)
     
    SQL> create table emp
    2 (empno number(4));
     
    테이블이 생성되었습니다.
     
    SQL> insert into emp values(1111);
     
    1 개의 행이 만들어졌습니다.
     
    SQL> commit;
     
    커밋이 완료되었습니다.
     
    만약 user를 지우면 어떻게 될까?
     
    SQL> conn system/oracle
    연결되었습니다.
    SQL> drop user user2;
     
     
    user를 지우면 지목된 user가 만든 모든 object가 삭제된다.
    워낙 큰일이라 지우려고하면 안전장치인 cascade가 있다. <- OBJECT가 한개라도 있을 경우.
    *CASCADE
     
    SQL> drop user user2;
    drop user user2
    *
    1행에 오류:
    ORA-01922: 'USER2'(을)를 삭제하려면 CASCADE를 지정하여야 합니다.
     
     
    SQL> DROP USER USER2 CASCADE; <- CASCADE를 넣어야 삭제.
     
    사용자가 삭제되었습니다.
     
     
    *lock 기능
    회사의 정보 보안을 위해 나간 직원의 계정을 삭제 해야만 하는 일이 벌어지는데
    삭제하지않고도 정보를 보호할 수 있는 lock기능을 사용한다.
     
    *drop을 안쓰기위해 계정 잠그기 쓰기 <-계정 보안을 위해
    SQL> alter user scott
    2 account lock;
     
     
     
     
    SQL> conn scott/tiger
    ERROR:
    ORA-28000: the account is locked
     
     
    lock풀기
    SQL> alter user scott
    2 account unlock;
     
    사용자가 변경되었습니다.

    댓글

Designed by Tistory.