연동을 하려고 보니 특정 유저에게만 패스워드를 보여줘야 하는일이 생겼다.
굳이 패스워드만 보여주는데 원본 테이블을 보여주기는 왠지 불안하고 ..
그래서 뷰를 하나 만들어서 그 뷰만 볼 수 있는 유저를 한명 만들어 주기로 했다.
일단 뷰를 만들고
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