저는 oracle 12c를 사용합니다. 모든 테이블의 모든 권한을 사용자에게 부여하려고합니다. 그리고 앞으로는 해당 사용자에게 권한을 추가 할 필요가 없습니다.이 작업을 수행해야합니다. 해당 사용자에게 시스템 테이블을 부여하고 싶지 않습니다. pl / sql 명령을 작성했습니다. 하지만 오류가 발생합니다.

BEGIN 2 FOR t IN (select * from dba_tables where owner not like "%SYS%" AND owner not like "%ADMIN%" AND iot_type IS NULL) 3 LOOP 4 EXECUTE IMMEDIATE "GRANT ALL PRIVILEGES ON "|| t.owner ||"." || t.table_name ||" TO GGSTEST"; 5 END LOOP; 6 END; 7 / BEGIN * ERROR at line 1: ORA-00905: missing keyword ORA-06512: at line 4 

오류가 무엇입니까? 감사합니다.

dbms_print를 사용합니다.

GRANT ALL ON OUTLN.OL$ TO GGSTEST GRANT ALL ON OUTLN.OL$HINTS TO GGSTEST GRANT ALL ON OUTLN.OL$NODES TO GGSTEST GRANT ALL ON DBSNMP.BSLN_BASELINES TO GGSTEST GRANT ALL ON APEX_040200.WWV_FLOW_LOG_HISTORY TO GGSTEST GRANT ALL ON DBSNMP.BSLN_METRIC_DEFAULTS TO GGSTEST GRANT ALL ON XDB.XDB$ROOT_INFO TO GGSTEST GRANT ALL ON XDB.XDB$XDB_READY TO GGSTEST GRANT ALL ON XDB.XDB$CDBPORTS TO GGSTEST GRANT ALL ON XDB.XDB$IMPORT_TT_INFO TO GGSTEST GRANT ALL ON XDB.XDB$TTSET TO GGSTEST GRANT ALL ON XDB.XDB$H_INDEX TO GGSTEST GRANT ALL ON XDB.XDB$D_LINK TO GGSTEST GRANT ALL ON XDB.XDB$COLUMN_INFO TO GGSTEST GRANT ALL ON XDB.XDB$PATH_INDEX_PARAMS TO GGSTEST GRANT ALL ON XDB.X$NM7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST GRANT ALL ON XDB.X$QN7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST GRANT ALL ON XDB.X$PT7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST GRANT ALL ON XDB.APP_USERS_AND_ROLES TO GGSTEST GRANT ALL ON XDB.APP_ROLE_MEMBERSHIP TO GGSTEST GRANT ALL ON XDB.XDB$DBFS_VIRTUAL_FOLDER TO GGSTEST BEGIN * ERROR at line 1: ORA-00905: missing keyword ORA-06512: at line 4 

댓글

  • 더블 소유자 및 테이블 이름에 따옴표를 붙입니다. 즉시 실행 ' " ' ||에서 모든 권한 부여 t.owner || ' ". " ' || t.table_name || ' " GGSTEST로 ';
  • IX.AQ $ _STREAMS_QUEUE_TABLE_L에서 모두 GGSTEST에 GRANT; 오류가 아닙니다. 하지만 pl / sql, loop; 오류가 발생합니다.
  • 그런 다음 다음을 시도하십시오. GRANT ALL ON IX. " AQ $ _STREAMS_QUEUE_TABLE_L " TO GGSTEST If 작동하지 않습니다. ' 고급 대기열 기능이있는 것일 수 있습니다 …
  • 무엇 ' 개체의 유형? OBJECT_TYPE, STATUS from dba_objects where owner = ' IX ' 및 object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
  • 나는 시도했습니다 '. 상태 유형 = 표 및 상태 = 유효

답변

GRANT ALL PRIVILEGES ON ....는 MySQL privs 구문입니다.

필요한 작업 :

GRANT ALL ON SCHEMA.TABLE TO USER 

문서 참조 .

댓글

  • 안녕하세요, 저도 MySQL 구문이라고 가르쳤지만 : check 이
  • grant all privileges to USERNAME는 완전히 다르며 db 전체입니다.
  • " 테이블에 대한 개체 권한을 사용자에게 부여 : 예 "
  • 사실, 신은 알고 있습니다. ' 테스트하기 편리한 DB가 없습니다. : /
  • 동일한 오류가 발생합니다 ..

답변

올바른 명령입니다. 이전에는 오라클의 설치 테이블로 인해 오류가 발생했습니다.

BEGIN FOR t IN (select * from dba_tables where owner!="GGSTEST" AND owner not like "%SYS%" AND owner not like "%ORDDATA%" AND owner not like "%ADMIN%" AND owner not like "%APEX%" AND owner not like "%XDB%" AND owner not like "%FLOW_FILES%" AND owner not like "%OE%" AND iot_type IS NULL) LOOP EXECUTE IMMEDIATE "GRANT ALL PRIVILEGES ON "|| t.owner ||"." || t.table_name ||" TO GGSTEST"; END LOOP; END; / 

Answer

문제는 달러 기호 나 해시 태그와 같이 PL / SQL에 의해 해석되는 문자 때문입니다. 큰 따옴표를 추가하면 더 이상 오류가 발생하지 않습니다.

감사합니다.

댓글

  • 해시 일 수 있습니다. ' 달러 기호에 오류가 발생하지 않습니다.
  • APEX, XDB, FLOW_FILES, ORDDATA 스키마 및이를 제외합니다. '가 작동했습니다.

답변

모든 테이블의 모든 권한을 사용자에게 부여합니다.

이유가 무엇입니까?

앞으로 해당 사용자에게 권한을 추가 할 필요가 없습니다.

예, 할 수 있습니다.
다른 테이블을 추가하자마자 전체 프로세스를 반복해야하며 각 사용자에 대해 수행해야합니다. 시간을 효율적으로 사용하지 않습니다.

이 작업을 수행해야합니다.

동의하지 않음에 동의합니다.

광범위한 사용자 대다수는 테이블에 대한 “모든 권한”이 필요하지 않습니다. 선택, 삽입, 삭제 및 업데이트 만 있으면됩니다.
어떤 사용자가 어딘가에서 테이블을 삭제하기로 결정했기 때문에 프로덕션 시스템이 어떻게 다운되었는지 (복구하는 데 귀하 가 오래 걸리지 만) 어떻게 경영진에게 설명 할 것입니까? , 그들이 할 수 있다는 것을 알았 기 때문에? 그것은 사용자의 책임이 아닙니다 . 그래서 그들은 처음에 그것에 대한 권한을 가질 수 없습니다 .

역할에 대해 읽어보십시오.
역할에 개체 수준 권한을 부여한 다음 [많은] 사용자에게 해당 역할을 부여하십시오. 테이블을 수정할 때 관련 역할에 [재-] 권한 만 부여하면됩니다. 오라클은 이러한 권한을 관련 사용자에게 “계단식”처리합니다. 사용자 그룹마다 다른 “레벨”권한이 필요한 경우 여러 역할을 생성합니다.

댓글

  • 이것들은 사실 일 수 있지만 스키마가 변경되는지, 환경이 개발인지 프로덕션인지에 대한 정보를 제공하지 않습니다. 개인 프로젝트 또는 그의 회사를위한 경우 '. 그의 실제 구문 관련 문제는 결코 해결하지 않습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다