제가 현재 시스템권한/오브젝트권한에 대해서 쿼리를 짜보면서 공부하고 있는데요
현재 system 스키마로 CREATE USER a_user IDENTIFIED BY ~~~; // CREATE USER b_user IDENTIFIED BY ~~~;
를 통해서 다른 스키마 2개를 만들었습니다.
a_user 스키마에 접속하여 AA 라는 테이블을 만들고 기본키 제약조건을 걸지 않았는데, b_user에서 a_user의 AA 테이블 A_NAME 컬럼에 기본키를 추가하고 싶습니다.
OCP를 준비하면서 "다른 스키마에 기본키를 추가하려면 시스템권한이 필요하다. 맞는 선지인가?" 라는 지문때문에 실습을 해보고 있는데
ALTER ANY TABLE 권한을 주어도 기본키가 추가되지 않습니다.
혹시 아예 불가능한걸까요? 가능하다면 어느 권한을 부여해야될지를 잘 모르겠습니다 ㅠㅠ
ALTER TABLE 문장의 설명을 보니 다른 스키마에 primary key를 추가하려면 인덱스를 만드는 권한이 필요하다고 합니다.
Additional Prerequisites for Constraints and Triggers To enable a unique or primary key constraint, you must have the privileges necessary to create an index on the table. You need these privileges because Oracle Database creates an index on the columns of the unique or primary key in the schema containing the table.
https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm#SQLRF01001
그래서 인덱스를 만들때 필요한 권한에 대해서 살펴보니, 다른 스키마에 대한 인덱스를 만드려면 CREATE ANY INDEX 권한이 필요하다는군요.
To create an index in another schema, you must have the CREATE ANY INDEX system privilege.
https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_5011.htm#SQLRF01209
ALTER (ANY TABLE)와 CREATE ANY INDEX 권한을 주시면 됩니다.