REVOKE(테이블, 뷰 또는 별칭 특권) 명령문
이 양식의 REVOKE문은 테이블, 뷰 또는 별칭에 대한 권한을 취소합니다.
호출
이 명령문은 애플리케이션 프로그램에 임베드되거나 동적 SQL문을 사용하여 실행할 수 있습니다. DYNAMICRULES 실행 동작이 패키지에 영향을 주는 경우에만 동적으로 준비될 수 있는 실행문입니다(SQLSTATE 42509).
권한 부여
- 참조된 테이블, 뷰 또는 별칭에 대한 CONTROL 특권
- 식별된 테이블, 뷰 또는 별칭이 포함된 스키마에 대한 스키마 ACCESSCTRL 권한
- ACCESSCTRL 또는 SECADM 권한
CONTROL 특권의 권한을 취소하려면 스키마 ACCESSCTRL, ACCESSCTRL 또는 SECADM 권한이 필요합니다. 카탈로그 테이블 및 뷰에 대한 특권의 권한을 취소하려면 데이터베이스 ACCESSCTRL 또는 SECADM 권한이 필요합니다.
구문
설명
- ALL 또는 ALL PRIVILEGES
- 지정된 테이블, 뷰 또는 별칭에 대한 권한 부여 이름에서 보유한 모든 특권(CONTROL 제외)을
권한 취소합니다.
ALL이 사용되지 않는 경우, 옵션 스택에 나열된 하나 이상의 키워드(ALTER에서 UPDATE까지)가 사용됩니다. 각 키워드는 설명된 특권을 권한 취소하지만 ON절에서 이름 지정한 테이블, 뷰 또는 별칭에만 적용됩니다. 동일한 키워드를 두 번 이상 지정할 수 없습니다.
- ALTER
- 특권을 권한 취소하여 컬럼을 기본 테이블 정의에 추가하고, 기본 키나 고유 제한 조건을 테이블에 작성하고, 테이블에서 외부 키를 작성하거나 삭제(drop)하고, 테이블, 뷰 또는 별칭에 주석을 추가/변경하고, 검사 제한조건을 작성하거나 삭제하고, 트리거를 작성하고, 별칭에 대한 컬럼 옵션을 추가, 재설정 또는 삭제하거나, 데이터 유형의 별칭 컬럼 이름을 변경합니다.
- CONTROL
- 테이블, 뷰 또는 별칭을 삭제하는 기능 및 테이블과 인덱스에서
RUNSTATS 유틸리티를 실행하는 기능을 권한 취소합니다.
authorization-name에서 CONTROL 특권을 권한 취소하더라도 해당 오브젝트의 사용자에게 권한 부여된 기타 특권을 권한 취소하지 않습니다.
- DELETE
- 특권을 권한 취소하여 테이블, 갱신 가능 뷰 또는 별칭에서 행을 삭제합니다.
- 색인
- 특권을 권한 취소하여 별칭에서 인덱스 스펙 또는 테이블에서 인덱스를 작성합니다. 인덱스 또는 인덱스 스펙의 작성자는 인덱스나 인덱스 스펙에 대한 CONTROL 특권을 자동으로 가집니다(인덱스나 인덱스 스펙을 삭제하는 권한을 작성자에게 부여). 또한 INDEX 특권이 권한 취소되더라도 작성자는 이 권한을 보유합니다.
- INSERT
- 특권을 권한 취소하여 테이블, 갱신 가능 뷰 또는 별칭에 행을 삽입하고 IMPORT 유틸리티를 실행합니다.
- REFERENCES
- 특권을 권한 취소하여 상위로 테이블을 참조하는 외부 키를 작성하거나 삭제합니다. 컬럼 레벨 REFERENCES 특권도 권한 취소됩니다.
- SELECT
- 특권을 권한 취소하여 테이블이나 뷰에서 행을 검색하고,
테이블에 뷰를 작성하고 테이블이나 뷰에 대해 EXPORT 유틸리티를
실행합니다.
SELECT 특권을 권한 취소하면 일부 뷰가 작동 불능으로 표시될 수 있습니다. (작동 불능 뷰에 대한 정보는
뷰 작성
을 참조하십시오.) - UPDATE
- 특권을 권한 취소하여 테이블, 갱신 가능 뷰 또는 별칭에서 행을 갱신합니다. 모든 컬럼 레벨 UPDATE 특권도 권한 취소됩니다.
- ON TABLE table-name 또는 view-name 또는 nickname
- 특권이 권한 취소될 테이블, 뷰 또는 별칭을 지정합니다. table-name은 선언된 임시 테이블일 수 없습니다(SQLSTATE 42995).
- FROM
- 특권이 권한 취소된 사용자를 표시합니다.
- 사용자
- authorization-name이 사용자를 식별한다는 것을 지정합니다.
- GROUP
- authorization-name이 그룹 이름을 식별한다는 것을 지정합니다.
- 직책
- authorization-name이 역할 이름을 식별한다는 것을 지정합니다.
- 권한 부여 이름, ...
- 하나 이상의 사용자, 그룹 또는 역할의 권한 부여 ID를 나열합니다.
권한 부여 ID의 목록에는 명령문을 실행하는 사용자의 권한 부여 ID가 포함될 수 없습니다(SQLSTATE 42502).
- PUBLIC
- PUBLIC에서 특권을 권한 취소합니다.
- BY ALL
- 권한 부여한 사용자와 상관없이 명시적으로 이 특권을 권한 부여받은 이름 지정된 모든 사용자에서 이름 지정된 각 특권을 권한 취소합니다. 이는 기본 동작입니다.
규칙
- 지정된 각 authorization-name의 경우 USER, GROUP 또는 ROLE이 지정되지 않은 경우에는 다음과 같습니다.
- 권한 받은 사용자가 authorization-name인 SYSCAT.TABAUTH 및
SYSCAT.COLAUTH 카탈로그 뷰에서 지정된 오브젝트에 대한 모든 행에 대해,
- 모든 행에 GRANTEETYPE이 'U'이면 USER가 가정됩니다.
- 모든 행에 GRANTEETYPE이 'G'이면 GROUP이 가정됩니다.
- 모든 행에 GRANTEETYPE이 'R'이면 ROLE이 가정됩니다.
- 모든 행에 GRANTEETYPE와 동일한 값이 없으면 오류가 리턴됩니다(SQLSTATE 56092).
- 권한 받은 사용자가 authorization-name인 SYSCAT.TABAUTH 및
SYSCAT.COLAUTH 카탈로그 뷰에서 지정된 오브젝트에 대한 모든 행에 대해,
참고
- 특권이 뷰의 소유자인 authorization-name에서 권한이 취소된 경우(SYSCAT.VIEWS에서 OWNER 컬럼에 기록된 대로), 해당 특권은 종속 뷰에서도 권한 취소됩니다.
- 뷰의
소유자가 뷰 정의가 사용하는 일부 오브젝트에서 SELECT 특권을 상실하는 경우(또는 뷰 정의가 사용하는 오브젝트가 삭제되거나 다른 뷰의 경우 작동 불능 상태가 된 경우),
해당 뷰는 작동 불능 상태가 됩니다.
그러나 ACCESSCTRL 또는 SECADM 권한을 보유하는 사용자가 명시적으로 소유자에게서 뷰에 관한 모든 특권을 권한 취소하는 경우, OWNER의 레코드는 SYSCAT.TABAUTH에 나타나지 않지만 아무 동작도 뷰에서 일어나지 않으며 작동 가능 상태로 남습니다.
- 작동 불능 뷰의 특권을 권한 취소할 수 없습니다.
- 패키지가 바운드된 권한 부여 ID가 패키지가 사용하는 오브젝트에 대한
특권을 상실하면 패키지는 유효하지 않을 수 있습니다. 다음 방법 중 하나로 특권을 상실할 수 있습니다.
- 특권이 권한 부여 ID에서 권한 취소됨
- 특권이 권한 부여 ID가 구성원인 역할에서 권한 취소됨
- 특권이 PUBLIC에서 권한 취소됨
예를 들어, USER1에서 소유한 패키지가 테이블 T1에서 SELECT를 포함하고 테이블 T1의 SELECT 특권이 USER1에서 권한 취소되는 경우, 패키지는 유효하지 않은 것으로 표시됩니다. SELECT 권한이 다시 권한 부여되거나 사용자가 DBADM 권한을 보유하는 경우, 실행 시 패키지가 성공적으로 리바인드됩니다.
다른 예는 USER1에서 소유한 패키지로, 역할 R1의 멤버입니다. 패키지는 테이블 T1에서 SELECT를 포함하며 테이블 T1의 SELECT 특권은 역할 R1에서 권한 취소됩니다. 기타 방법으로 USER1이 테이블 T1에 대한 SELECT 특권을 보유하지 않는다고 가정하여 패키지는 유효하지 않은 것으로 표시됩니다.
- FROM절에서 OUTER(Z)를 사용하는 패키지, 트리거 또는 뷰는 Z의 모든 서브테이블 또는 서브뷰에 대한 SELECT 특권을 가지는 지에 따라 달라집니다. 마찬가지로, DEREF(Y)를 사용하는 패키지, 트리거 또는 뷰(여기서 Y는 대상 테이블 또는 뷰 Z가 있는 참조 유형임)는 Z의 모든 서브테이블 또는 서브뷰에 대한 SELECT 특권을 가지는 지 여부에 따라 달라집니다. 이러한 패키지는 무효가 될 수 있으며, 이러한 트리거 또는 뷰는 패키지가 바인드된 권한 부여 ID 또는 트리거나 뷰의 소유자가 SELECT 특권을 잃게 되면 작동 불능 상태가 됩니다. 다음 방법 중 하나로 SELECT 특권을 상실할 수 있습니다.
- SELECT 특권이 권한 부여 ID에서 권한 취소됨
- SELECT 특권이 권한 부여 ID가 구성원인 역할에서 권한 취소됨
- SELECT 특권이 PUBLIC에서 권한 취소됨
- 테이블, 뷰 또는 별칭 특권이 CONTROL 특권을 권한 취소하지 않고도 오브젝트에서 CONTROL을 사용하여 authorization-name에서 권한 취소될 수 없습니다(SQLSTATE 42504).
- 특정 특권을 권한 취소해도 반드시 해당 조치를 수행하는 기능을 권한 취소하지는 않습니다. 다른 특권을 PUBLIC, 그룹 역할에서 보유하거나, 사용자가 테이블이나 보기의 스키마에서 ALTERIN과 같은 특권을 보유하는 경우 사용자는 작업을 진행할 수 있습니다.
- 구체화된
쿼리 테이블의 소유자가 구체화된 쿼리 테이블 정의가 종속된 테이블에서 SELECT 특권을
상실한 경우(또는 구체화된 쿼리 테이블 정의가 종속된 테이블이 삭제된 경우),
구체화된 쿼리 테이블이 삭제됩니다.
그러나 SECADM 또는 ACCESSCTRL 권한을 보유하는 사용자가 소유자에게서 구체화된 쿼리 테이블에 대한 모든 특권을 명시적으로 권한 취소하는 경우, OWNER의 SYSTABAUTH에서 레코드가 삭제되지만 구체화된 쿼리 테이블에 아무 동작도 일어나지 않으며 작동 가능 상태로 남습니다.
- 별칭 특권을 권한 취소해도 데이터 소스 오브젝트(테이블이나 보기) 특권에 영향을 주지 않습니다.
- 다른 일부 오브젝트가 종속되기 때문에 SQL 함수나 메소드 본문을 삭제할 수 없는 경우, SQL 함수 또는 메소드 본문에서 직접 또는 간접적으로 참조되는 테이블이나 뷰에 대한 SELECT 특권의 권한 취소에 실패할 수 있습니다(SQLSTATE 42893).
- 다음의 경우 SELECT 특권을 권한 취소하면
SQL 함수나 메소드가 삭제됩니다.
- SQL 함수나 메소드 본문의 소유자가 SQL 함수나 메소드 본문 정의가 사용하는 일부 오브젝트에 대해 SELECT 특권을 상실합니다. 소유자가 구성원인 역할 또는 PUBLIC에서의 권한 취소 때문에 특권을 상실할 수 있다는 점에 주의하십시오.
- SQL 함수나 메소드 본문 정의가 종속된 오브젝트가 삭제됨
- 권한 부여 옵션 사용으로 권한 취소: 권한 부여 옵션 사용으로 권한 취소하는 유일한 방법은 특권 자체를 권한 취소한 다음 권한 부여 옵션 사용을 지정하지 않고 다시 권한을 부여하는 것입니다.
- 컬럼 특권 권한 취소: 컬럼 특권을 권한 취소하는 유일한 방법은 전체 테이블 자체에서 특권을 권한 취소한 다음 각 컬럼에 대해 다시 권한을 부여하는 것입니다.
예:
- 예 1: 사용자 ENGLES로부터 EMPLOYEE 테이블에 대한 SELECT 특권을 취소하십시오. 이 테이블 및 권한 받은 사용자에 대한 SYSCAT.TABAUTH 카탈로그 뷰에 하나의
행이 있으며 GRANTEETYPE 값은 U입니다.
REVOKE SELECT ON TABLE EMPLOYEE FROM ENGLES - 예 2: 모든 로컬 사용자에게 이전에 권한 부여된 EMPLOYEE 테이블에 대한 갱신 특권을 권한 취소합니다. 특정 사용자에 대한 권한 부여에는
적용되지 않습니다.
REVOKE UPDATE ON EMPLOYEE FROM PUBLIC - 예 3: 사용자 PELLOW와 MLI및 그룹 PLANNER로부터 테이블 EMPLOYEE에 대한 모든 특권을 취소하십시오.
REVOKE ALL ON EMPLOYEE FROM USER PELLOW, USER MLI, GROUP PLANNERS - 예 4: 테이블 CORPDATA.EMPLOYEE 를 JOHN이라는 사용자로부터 가져옵니다. 이 테이블 및 권한 받은 사용자에 대한 SYSCAT.TABAUTH 카탈로그 뷰에 하나의
행이 있으며 GRANTEETYPE 값은 U입니다.
또는REVOKE SELECT ON CORPDATA.EMPLOYEE FROM JOHN
이전에 특권이 GROUP JOHN에게 권한 부여되지 않았기 때문에 GROUP JOHN으로부터의 특권을 권한 취소하면 오류가 발생합니다.REVOKE SELECT ON CORPDATA.EMPLOYEE FROM USER JOHN - JOHN이라는 그룹에서 실시예 5: 테이블에 대한 SELECT 특권을 취소 CORPDATA.EMPLOYEE 하십시오. 이 테이블 및 권한 받은 사용자에 대한 SYSCAT.TABAUTH 카탈로그 뷰에 하나의
행이 있으며 GRANTEETYPE 값은 G입니다.
또는REVOKE SELECT ON CORPDATA.EMPLOYEE FROM JOHNREVOKE SELECT ON CORPDATA.EMPLOYEE FROM GROUP JOHN - 예 6: 별칭 ORAREM1에 대한 인덱스 스펙을 작성하기 위한 사용자 SHAWN의 특권을 취소하십시오.
REVOKE INDEX ON ORAREM1 FROM USER SHAWN
