2014-09-18 6 views
2

안녕하세요, 저는이 질문을 가지고 있습니다.모든 권한 취소 오라클

동일한 스키마의 일부 테이블을 제외하고 권한 부여가 허용됩니다.

ORA-01927 : 권한을 취소 할 수 없습니다 당신은 부여하지 않았다

EXECUTE IMMEDIATE 
    'CREATE USER USREJECUTA_SUI_ABAS 
     IDENTIFIED BY VALUES ''test'' 
     DEFAULT TABLESPACE USERS 
     TEMPORARY TABLESPACE TEMP 
     PROFILE DEFAULT 
     ACCOUNT UNLOCK'; 
    -- 2 Roles for USREJECUTA_SUI 
    EXECUTE IMMEDIATE 'GRANT CONNECT TO USREJECUTA_SUI_ABAS'; 
    EXECUTE IMMEDIATE 'GRANT RESOURCE TO USREJECUTA_SUI_ABAS'; 
    EXECUTE IMMEDIATE 'ALTER USER USREJECUTA_SUI_ABAS DEFAULT ROLE ALL'; 
    -- 1 System Privileges for USREJECUTA_SUI 
    EXECUTE IMMEDIATE 'GRANT SELECT ANY TABLE TO USREJECUTA_SUI_ABAS';   
    EXECUTE IMMEDIATE 'GRANT UPDATE ANY TABLE TO USREJECUTA_SUI_ABAS'; 
    EXECUTE IMMEDIATE 'GRANT INSERT ANY TABLE TO USREJECUTA_SUI_ABAS'; 
    EXECUTE IMMEDIATE 'GRANT UNLIMITED TABLESPACE TO USREJECUTA_SUI_ABAS'; 

지금 일부 테이블

REVOKE INSERT,UPDATE ON VELITTDA.TAPROVEEDORESXPAIS  FROM USREJECUTA_SUI'; 

하지만 시스템이 오류를 시작에서 권한을 취소 예를 들어

.

너는 이것을하기 위해 약간의 와트를 주무시겠습니까? 나는 너의 도움을 많이 apreciate 것입니다.

답변

1

아니요, 불가능합니다. 누군가 SELECT ANY TABLE을 주면 데이터베이스의 모든 테이블을 쿼리 할 수있는 권한을 부여했습니다. 오브젝트 레벨 특권을 부여하지 않으면 오브젝트 레벨 특권을 취소 할 수 없습니다.

적절한 방법은 거의 항상 사용자가 액세스해야하는 실제 개체 집합에 개체 수준 권한이있는 역할을 만드는 것입니다. 사용자 (및 유사한 권한 세트가 필요한 다른 사용자)에게 역할을 부여하십시오. 다양한 ANY 역할은 실제로 DBA와 같은 사람들에게만 적합합니다.

+0

안녕하세요 저스틴 역할 사용에 대해 읽지 만 새 스키마가 스키마에 추가되면 자동으로이 새 개체에 대한 권한을 부여하는 방법을 알고 있습니까? – OAlavez

+0

@OAlavez - 새 테이블이 추가되면 변경 제어를 수행해야합니다. 변경 제어에는 테이블에 필요한 권한이 포함되어야합니다 (그렇지 않으면 새 테이블이 제외하려는 테이블인지 여부를 어떻게 알 수 있습니까?). 정말로 정말로 원한다면, 권한을 부여하는 방아쇠를 만들 수 있지만, 강력히 권고한다. (http://stackoverflow.com/questions/9262539/how-do-i-create-a-oracle-trigger- 그 부여 - 권한/9263285 # 9263285) –

+0

조언 덕분에, 나는 변화 관리에있는 각 테이블에 대한 그랜트 부여, 당신의 도움을 apify. – OAlavez

0

SELECT ANY TABLE (또는 다른 ANY TABLE) 권한을 부여하는 것은 일반적으로 잘못된 것이며, 임의의 스키마 사용자에게 DBA를 부여하는 것만큼이나 나쁜 것입니다.

많은 권한 부여 문을 발행하지 않으려는 경우 데이터 사전에서 DDL을 생성하는 간단한 방법을 사용하십시오.

set head off 
set pagesize 0 
spool grant_foo.sql 

select 'GRANT SELECT ON '||table_name||' TO FOO_ROLE;' 
from all_tables where owner = 'FOO' 
order by table_name 
; 

spool off 

그런 다음 실행하기 전에 필요에 따라 grant_foo.sql을 편집하십시오.