2017-03-15 4 views
1

Oracle XE (11.2.0.2.0)를 실행 중입니다. 하나의 사용자 U1이 테이블을 만들고 소유하고 있으며 다른 사용자 U2가이를 사용하고 있습니다. U1이 U2에 권한을 부여하면 모든 것이 작동합니다.Oracle 사용자가 역할에서 권한을 얻지 못했습니다.

이제 U1이 TESTROLE 역할을 만들고 권한을 부여하고 U2에 TESTROLE을 부여했습니다. U2는 USER_ROLE_PRIVS에서 TESTROLE을 볼 수 있지만 권한을 상속하지 않습니다 : 테이블에 액세스 할 수 없으며 권한이 USER_TAB_PRIVS에 나열되지 않습니다. U2는이 ORA-을 얻는 SELECT * FROM U1.TABLE1을 할 때

CREATE TABLE TABLE1 (FIELD1 VARCHAR2(20)); 
CREATE ROLE TESTROLE NOT IDENTIFIED; 
GRANT SELECT ON TABLE1 TO TESTROLE; 
GRANT TESTROLE TO U2; 
ALTER USER U2 DEFAULT ROLE ALL; 

가 (예, U1이 시험에 대한 ALTER 사용 권한을 주었다.) 이제

: 여기

내가 (U1로) 한 일이다 00942 (테이블 또는 뷰가 존재하지 않음). SELECT 권한을 U2에 직접 부여하면 액세스가 작동합니다. U2가 SELECT * FROM USER_ROLE_PRIVS을 호출하면 DEFAULT_ROLE = YES 인 TESTROLE이 있습니다.

처음에는 XE가 역할을 지원하지 않을 수도 있지만 그러한 제한이 없다고 생각했습니다. 내가 뭘 놓치고 있니? 어떤 힌트도 감사합니다.

+0

역할을 부여 받았을 때 U2에 로그인 했습니까? 그렇다면 U2 로깅을 다시 시도 했습니까? 사용자가 권한을 부여 받았을 때 로그인했을 때 올바른 권한을 얻지 못한 문제가 발생했다고 생각합니다. – Boneist

+2

사용자 'U2'가 직접적으로 또는 절차를 통해 'U1.TABLE1'에 액세스하려고합니까? 절차는 'U2'가 역할을 통해 획득하는 권한을 활용할 수 없습니다. 직접 지원을 통해 획득 한 권한 만 사용할 수 있습니다. https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:1065832643319 – mathguy

+0

@Boneist, 트릭을 수행 한 것처럼 보입니다! 흥미로운 점은 역할을 만드는 시간이 결정적이라고 생각하는 것입니다 ('U2'가 그 때 기록되었습니다). 이제는 그 역할에 더 많은 보조금을 추가 할 수 있으며'U2'가 로그 오프하지 않고 즉시 효과적이게됩니다. 이것을 신용으로 바꾸고 싶습니다. – Renardo

답변

1

U2가 역할을 부여 할 때 로그인 한 경우 U2를 로그 오프 한 다음 다시 로그인하십시오.

+0

(그리고 지금 나는 Bono가 이것에 대해 말해야 할 것이 무엇인지 궁금합니다! * {;-)) – Boneist

+0

그게 내 문제를 해결했습니다. 그렇습니다, DB 요청의 원 자성에 관해서는 많은 ... 당신의 대답을 upvoted하지만 난 초보자 (두 번째 질문)로 내 upvote 표시되지 않습니다. 어쨌든 많은 감사합니다. – Renardo

+0

@ 레나도 (Renaardo) 당신이 가진 점수에 관계없이 요청한 질문에 대해 항상 [대답을 수락합니다] (http://stackoverflow.com/help/someone-answers) 할 수 있습니다. – Boneist

관련 문제