2017-02-17 1 views
3

SQL Developer를 사용하여 Oracle DB 11g에서 읽기 전용 권한 만있는 관련 스키마를 가진 사용자를 만들었습니다. 이제는 새로운 사용자가 내가 선택한 소수를 제외한 다른 사용자/스키마를 볼 수 없도록 제한하려고합니다.Oracle SQL Developer - 특정 스키마 만 볼 수 있도록 사용자를 제한하는 방법

다른 말로하면 (SQL Developer에서) 자신의 스키마에서 "다른 사용자"폴더로 이동할 때 해당 사용자가 해당 데이터베이스에있는 다른 모든 사용자를 볼 수 없게하려고합니다. 나는 그들에게 단지 몇 가지 것들을 보길 원한다.

가능한 경우 어떻게합니까?

Btw ... 나는 다른 사용자 (예 : 테이블 만들기, 쿼리 실행 등)에 아무 것도 할 수 없도록 제한 할 수 있음을 알고 있습니다. 그러나 나는 다른 사람들이 거기에 있다는 것을 보거나 보지 못하게하고 싶다.

답변

2

기본적으로 SQL Developer에서는 데이터베이스에서 수행 할 수있는 작업 만 수행 할 수 있습니다.

Alex가 말한 것처럼 SQL Developer는 SYS.ALL_USERS의 SELECT를 사용하여 시스템의 모든 사용자를 봅니다. 이것은 SQL Developer 문제가 아닙니다. 사용자가 SQL * Plus에 액세스 할 수 있다면 데이터베이스에 대해 select username from sys.all_users을 직접 실행하여 동일한 정보를 얻을 수 있습니다.

사용자로부터 해당 정보를 제거하는 경로는 동일합니다. 하나는 SELECT 권한이 부여 된 테이블에서만 SELECT 할 수 있습니다. 카탈로그 테이블과 뷰 (특히 SYS 스키마의 ALL_USERS)에서 선택하는 것은 일반적으로 간접적 인 권한 부여입니다. PUBLIC 역할은이 테이블에서 SELECT 할 수있는 권한을 가지며 대부분의 경우 (기본적으로 관리 도구에 따라 다름) new 사용자에게는 PUBLIC 역할이 부여됩니다.

비즈니스 요구 사항에 따라 선택한 사용자의 PUBLIC 역할을 취소 한 다음 (부여한 권한 번들을 만들어 잃어버린 것을 대체 할 수 있음), 또는 더 크게, 그렇지 않을 수도 있습니다 해야 할 일 - 간단하게 revoke select on all_users from public; (SYSDBA 특권 또는이 조작을 수행하기에 충분한 다른 특권으로 로그인 한 상태에서).

편집 - 방금 확인했는데 안타깝게도 PUBLIC 역할을 취소 할 수 없습니다. 데이터베이스의 모든 사용자에게 자동으로 부여되며 변경할 수 없습니다. 이것은 PUBLIC 자체가 갖는 특권을 엉망으로 만드는 덜 바람직한 대안을 남긴다. 최종 편집

난 그냥이 테스트 - 내가 as sysdba 로그인 PUBLIC에서 SYS.ALL_USERS에 선택 취소 한 다음 SQL Developer를 종료하고 다시 시작. 물론 필자는 데이터베이스에서 작성한 사용자 정의 사용자 ("사용자"를 위해 작성한 SQL Developer 연결)에서 "다른 사용자"를 더 이상 볼 수 없습니다.

+0

우수. 당신의 도움을 주셔서 감사합니다. – ptownbro

+0

@ptownbro - 내 ** 수정 **에 유의하십시오. - 불행히도 PUBLIC은 사용자로부터 떠날 수 없습니다. 유일한 해결책은 PUBLIC의 SYS.ALL_USERS에서 SELECT를 취소하는 것인데, 이는 다른 사용자들에게 (그리고 아마도 그 테이블에 액세스해야하는 프로세스와 응용 프로그램에) 불쾌한 영향을 미칠 수 있습니다. – mathguy

2

본질적으로 할 수 없습니다. 단지이 부여 된

select * from (select USERNAME 
FROM SYS.ALL_USERS au 
WHERE au.USERNAME != USER 
); 

브랜드의 새로운 사용자 : 당신이 연결 패널에서 '다른 사용자'섹션을 확장 당신이 SQL Developer의 문 로그를 보면, 당신은 그것을 사용하고 명령이 나타납니다 연결 권한은 해당 시스템보기에서 나열된 모든 사용자를 볼 수 있습니다.

해당 쿼리가 sys 스키마로 all_users 개체 이름을 한정하므로 제한된 목록을 제공하는 사용자의보기 또는 개인 동의어를 만들 수 없습니다. 물론 사용자는 어쨌든 원한다면 그것을 회피 할 수 있습니다.

SQL Developer를 사용하면 연결 창에서 필터링 할 수 있습니다. 당신이 '다른 사용자'를 마우스 오른쪽 버튼으로 클릭하고 선택하면 '필터를 적용 ...'당신과 같은 대화 상자가 나타납니다 :

apply filter dialog

당신은 '과 일치'로 그를 설정하고 모든 스키마 수를 당신은 더하기 추가하려면 녹색 더하기 기호를 클릭, 표시되고 싶지 않아요. 그런 다음 해당 사용자 만 '다른 사용자'아래에 표시됩니다. 당신이 확장 할 때 '다른 사용자의 문 로그 대신이 수정 된 쿼리를 보여줍니다

select * from (select USERNAME 
FROM SYS.ALL_USERS au 
WHERE au.USERNAME != USER 
) WHERE (UPPER(USERNAME) = (UPPER(:SCHEMA)) OR UPPER(USERNAME) = (UPPER(:SCHEMA0))) 

을 ... 그리고는 바인드 매개 변수가

"SCHEMA"="SOUSER1", "SCHEMA0"="SOUSER2"입니다 보여줍니다하지만 중앙에서 그것을 제어 할 수 없습니다, 당신은 할 것 SQL Developer의 모든 복사본에 설정 (아마도 수동으로 설정 파일을 제공 할 수 있음에도 불구하고 가능)하고 사용자는 필터를 쉽게 제거하거나 변경할 수 있습니다. 그것은 사용자가 아닌 클라이언트에게 영향을 미치며 다시 쉽게 피할 수 있습니다.

+0

Grrr. 승인. 그래서 내 끝에 필터를 적용하더라도, 그것의 끝에 표시되지 않습니다? 그것은 당신이 중앙에서 통제 할 수 없다는 것을 의미합니까? – ptownbro

+0

예, 클라이언트 (예 : PC의 SQL Developer)에서 필터 또는 환경 설정을 변경해도 다른 사용자에게 영향을 미치지 않습니다. 올바른 설정 파일과 필터와 관련된 비트를 찾을 수 있다면 그것을 배포하는 방법을 찾을 수는 있지만 쉽게는 알 수 없습니다. (오라클은 VPD를 가지고 있지만, 시스템 뷰에 적용 할 수 있는지 여부는 확실하지 않습니다.) –

+0

관심이 있으신 분은 데이터베이스 문제입니다. SQL Developer 문제가 아닙니다. 나는 방금 게시 한 답변에서 더 설명합니다. – mathguy

관련 문제