SSISO Community

시소당

[Oracle]뷰를 만들어서 특정 유저에게만 공개해보자. DataBase

연동을 하려고 보니 특정 유저에게만 패스워드를 보여줘야 하는일이 생겼다.

 

굳이 패스워드만 보여주는데 원본 테이블을 보여주기는 왠지 불안하고 ..

 

그래서 뷰를 하나 만들어서 그 뷰만 볼 수 있는 유저를 한명 만들어 주기로 했다.

 

일단 뷰를 만들고

 

CREATE VIEW UserPasswordForMail
AS
SELECT ACCOUNT, NAME, PASSWORD FROM CDUSER;

특정 사용자를 생성 후

 

CREATE USER mail IDENTIFIED BY mail;

(물론 이건 관리자나 "/as sysdba"로 들어가서.)

 

접속과 리소스를 제어하는 권한을 준  후

GRANT CONNECT, RESOURCE TO mail;

 

가만..  뷰만 보여주면 되는데 너무 큰권한을 주면 안되잖아?

다시 빼자 -_-

REVOKE CONNECT, RESOURCE from mail;

 

참고로 CONNECT 권한은 오라클에서 미리 정의한 몇 가지의 롤에 해당. CREATE SESSION, CREATE TABLE, CREATE SYNONYM, 그리고 여섯 가지 다른 시스템 권한을 포함한다. 그리고 RESOURCE 룰을 가진 사용자는 UNLIMETED TABLESPACE 시스템 권한까지 갖게 되므로 불 필요한 권한은 과감히 삭제하도록 하자.

 

그럼 뷰에 대한 권한을 줘볼까?

이땐 UserPasswordForMail을 만들었던 유저로 다시 접속 후 생성해 준다

conn core/core

GRANT SELECT ON UserPasswordForMail TO mail

 

만들고 나서 mail 유저로 붙어보자.. 하하 역시 접속 권한이 없다 -_-;

다시 admin으로 접속 권한을 준다

GRANT CREATE SESSION TO mail

자 이제 mail 유저로 붙어서 아래와 같이 검색하면 제대로 값이 나옴을 볼수 있다.

SELECT * FROM core.UserPasswordForMail

 

결론은 일반 뷰만 보이는 유저를 만들려고 하면 두개의 권한만 주면 된다.
관리자로 GRANT CREATE SESSION TO mail

뷰가 있는 유저로 GRANT SELECT ON UserPasswordForMail TO mail

3748 view

4.0 stars