ORA-01031: 권한이 불충분합니다 오류를 해결하는 방법에 대해 알아보도록 합시다. 해당 오류는 권한이 부족한 경우 모든 곳에서 볼 수 있으니, 예제 자료와 다른 곳에서 발생하였더라도 충분히 유추하여 해결할 수 있을 것입니다. 즉, 오류를 간단히 요약하면 '동의어 생성을 시도하였으나 권한이 불충분하다'는 문구가 나오는 것입니다.
ORA-01031: insufficient privileges SYNONYM
동의어를 생성하거나 수정할 때에 ORA-01031: 권한이 불충분합니다 오류가 발생할 수 있습니다. 동의어 생성 권한을 부여하여 해결하도록 합니다.
SYNONYM을 공개 동의어로 정의하려면 public으로 할 텐데, 권한 또한 public에 맞게 주어야 합니다. 보통 테이블 생성 시에는 동의어도 같이 생성하는 경향이 있습니다. 동의어 생성 시 권한 문제가 발생하는 경우에 다음과 같이 설정합니다.
PUBLIC SYNONYM
PUBLIC SYNONYM 을 시도하였으면 권한 또한 PUBLIC 으로 동의어 생성 권한을 부여하도록 합니다.
PUBLIC 없이 SYNONYM 권한만 주고 해봤을 때, 권한 불충분으로 동의어가 만들어지지 않을 것입니다.
----------------------------------------------------------------------------------------------------
--공개 동의어 여부에 따라 달리 권한을 부여해 주세요.
--GRANT CREATE SYNONYM TO USER_NAME;
----------------------------------------------------------------------------------------------------
GRANT CREATE PUBLIC SYNONYM TO USER_NAME;
----------------------------------------------------------------------------------------------------
REVOKE CREATE PUBLIC SYNONYM FROM USER_NAME;
----------------------------------------------------------------------------------------------------
--프라이빗 시노님
GRANT CREATE SYNONYM TO USER_NAME;
--퍼블릭 시노님
GRANT CREATE PUBLIC SYNONYM TO USER_NAME;
상기와 같이 권한 부여 이후 정상적으로 처리할 수 있답니다.
ORA-01031: insufficient privileges VIEW
--생성한 유저로 뷰를 만들려고 하는데 ORA-01031 오류가 발생할 때
GRANT CREATE VIEW TO USER_NAME;
--안 되면 테이블에 대한 셀렉트 권한도 부여해봅니다.
GRANT SELECT ON TABLE_NAME TO USER_NAME;
ORA-01031: 권한이 불충분합니다 오류가 Sequence 생성 시 발생하는 경우에 대해 안내해 드리겠습니다.
ORA-01031: insufficient privileges SEQUENCE
해당 오류는 시퀀스 생성 권한 또는 롤을 부여하여 해결할 수 있습니다. 아래 예제는 sysdba 계정으로 접속하여 권한을 부여하도록 진행하겠습니다.Enter user-name: sys as sysdba
Enter password:
GRANT CREATE SEQUENCE TO USER_NAME;
Grant succeeded.
ORA-01031: 권한이 불충분합니다 Sequence 원인
적절한 권한 없이 현재 사용자 이름 또는 암호를 변경하려고 시도했습니다. 이 오류는 필요한 운영 체제 권한 없이 데이터베이스를 설치하려는 경우에도 발생합니다. Trusted Oracle이 DBMS MAC에 구성되어 있을 때 사용자가 현재 로그인보다 상위 레이블에서 필요한 권한을 부여받은 경우 이 오류가 발생할 수 있습니다.
ORA-01031: 권한이 불충분합니다 Sequence 해결하기
데이터베이스 관리자에게 작업을 수행하거나 필요한 권한을 부여하도록 요청하십시오. 더 높은 레이블에서 적절한 권한이 부여되었지만 이 오류가 발생하는 신뢰할 수 있는 Oracle 사용자의 경우, 데이터베이스 관리자에게 적절한 레이블에서 권한을 다시 부여하도록 요청하십시오.
ORA-01031: insufficient privileges VIEW
테스트를 해보려니 권한이 불충분하다며 테이블을 생성할 수가 없군요.
DBA 권한이 있는 계정으로 접속하셔서 권한을 부여하시면 됩니다.
--권한을 부여받을 계정입니다. (grant to)
GRANT CREATE TABLE TO USER_NAME;
--권한 회수 명령어는 다음과 같습니다. (revoke from)
REVOKE CREATE TABLE FROM USER_NAME;
ORA-01031: insufficient privileges Tablespace
Create Tablespace insufficient privileges 문제를 해결해 보도록 합시다. 테이블스페이스를 생성하려고 하는데, ORA-01031: insufficient privileges 오류가 발생합니다. 권한을 추가해 주시면 해결할 수 있습니다.
ORA-01031 오류를 해결하기 위해 다음과 같은 명령어를 실행하세요. 테이블스페이스 생성 및 권한부여가 가능한 계정으로 로그인하셔야 합니다.
GRANT CREATE TABLESPACE TO USER_NAME;
--Grant succeeded.
테이블스페이스 생성 예제 자료는 다음과 같습니다.
CREATE TABLESPACE TABLESPACE_NAME DATAFILE
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\TABLESPACE_NAME.DBF' SIZE 360M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
FLASHBACK ON;
다음은 임시 테이블스페이스 예제 자료입니다. XE에서 시스템 계정에 기본적으로 있는 스크립트와 동일합니다.
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE
'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\TEMP.DBF' SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
TABLESPACE GROUP ''
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
ORA-01031: insufficient privileges Database Link
오라클 데이터베이스에서 Create 또는 Drop 명령으로 데이터베이스 링크를 생성 또는 삭제하려고 합니다. 하지만, 이때 ORA-01031 : insufficient privileges 오류가 발생하는 경우도 있습니다. 해당 오류를 해결하려면 GRANT 명령을 통해, 해당 스키마가 데이터베이스 링크의 정의에 대한 충분한 권한을 가질 수 있도록 설정하여야 합니다.
데이터베이스 링크는 퍼블릭 여부가 구분되어 있으며, 생성 권한은 프라이빗과 퍼블릭이 별개로 있습니다. 드랍은 필요 시 퍼블릭 데이터베이스 링크에 대한 건을 부여하면 됩니다.
GRANT CREATE DATABASE LINK TO USER_NAME;
GRANT CREATE PUBLIC DATABASE LINK TO USER_NAME;
--ORA-00990: missing or invalid privilege
GRANT DROP DATABASE LINK TO USER_NAME;
GRANT DROP PUBLIC DATABASE LINK TO USER_NAME;
ORA-01031: insufficient privileges TABLE
오라클 데이터베이스에서 신규로 생성한 유저가 테이블 생성 시 발생하는 오류 해결 방법입니다. 테이블 생성 자체에 권한 문제가 있을 수 있고, 그 문제가 해결된 이후에는 테이블스페이스에 대한 할당 문제가 발생할 수 있습니다.
- ORA-01031: Insufficient privileges (when create table)
- 동의어 생성 권한
테이블 생성에 대한 권한을 부여합니다. 해당 권한을 부여할 수 있는 계정으로 우선 로그인 해야 합니다.
GRANT CREATE TABLE TO USER_NAME;
ORA-01031: insufficient privileges PROCEDURE, FUNCTION
패키지를 생성 시도하는데 테스트 계정이라 그런가 권한 불충분이 또 나왔습니다. 패키지 내에 혹시나 해서 FUNCTION 도 추가해봤는데 CREATE PROCEDURE 권한으로 함수를 내포한 패키지 생성이 가능함을 확인했습니다.
--실행하여 권한을 부여합니다.
GRANT CREATE PROCEDURE TO USER_NAME;
--패키지 테스트
CREATE OR REPLACE PACKAGE USER_NAME.PACKAGE_NAME
IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE P_PROCEDURE_NAME (P_V_PARAM1 IN VARCHAR2, P_B_PARAM2 IN BOOLEAN);
FUNCTION F_FUNCTION_NAME
RETURN VARCHAR2;
END PACKAGE_NAME;
/
ORA-01031: insufficient privileges CONTEXT
컨텍스트는 any context 권한을 부여합니다.
GRANT CREATE ANY CONTEXT TO USER_NAME;