2012-05-20 3 views
0

오라클과 php를 사용하여 데이터베이스를 생성하고 역할을 보여줘야합니다. 나는 새로운 역할이라고 직원을 작성 employee1은 이러한 테이블이없는 말한대로 연결된 모든 선택을 사용하는 이유는 무엇오라클에 역할 부여하기

CREATE ROLE read_only; 
GRANT create session TO read_only; 
GRANT select ON workson TO read_only; 
GRANT select ON employee TO read_only; 
GRANT select ON project TO read_only; 
GRANT select ON department TO read_only; 

CREATE ROLE employee; 
GRANT read_only TO employee; 
GRANT update ON employee TO employee; 
GRANT insert ON workson TO employee; 

Create user employee1 identified by qwerty1; 
GRANT employee TO employee1; 

employee1라는 새로운 사용자에게 할당. select *에서 employee는 테이블이 없다고 말합니다. 나는 내 역할을 잘못 했나?

답변

2

귀하의 보조금이 정상적으로 보입니다. employee1 사용자가 employee 테이블을 소유하지 않는다고 가정하면 SELECT의 테이블 이름을 테이블 소유자로 한정해야합니다. 우리가 hr 사용자가 소유 한 employee 테이블에 대해 얘기하는 경우에 당신은 당신의 테이블 이름을 한정하지 않으려면 예를 들어, 당신은 당신이 몇 가지있다,

SELECT * 
    FROM hr.employee; 

에 필요한 것 옵션 중. 첫째, 동의어를 만들 수 있습니다. 당신은 employee1 사용자에만 적용되는 employee1 스키마의 개인 동의어를 만들 수 있습니다

CREATE SYNONYM employee 
    FOR hr.employee; 

또는

CREATE PUBLIC SYNONYM employee 
    FOR hr.employee; 

두 번째 옵션을 설정하는 것입니다 모든 사용자에게 적용되는 공용 동의어를 만들 수 있습니다 연결 후 current_schema. 당신은 장소에 적절한 동의어이 있거나이 current_schema를 설정 한 경우, 당신은 테이블의 소유자와 테이블 이름을 접두사가없는 경우

ALTER SESSION SET current_schema=hr; 

.