저는 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 스키마 및이를 제외합니다. '가 작동했습니다.
답변
모든 테이블의 모든 권한을 사용자에게 부여합니다.
이유가 무엇입니까?
앞으로 해당 사용자에게 권한을 추가 할 필요가 없습니다.
예, 할 수 있습니다.
다른 테이블을 추가하자마자 전체 프로세스를 반복해야하며 각 사용자에 대해 수행해야합니다. 시간을 효율적으로 사용하지 않습니다.
이 작업을 수행해야합니다.
동의하지 않음에 동의합니다.
광범위한 사용자 대다수는 테이블에 대한 “모든 권한”이 필요하지 않습니다. 선택, 삽입, 삭제 및 업데이트 만 있으면됩니다.
어떤 사용자가 어딘가에서 테이블을 삭제하기로 결정했기 때문에 프로덕션 시스템이 어떻게 다운되었는지 (복구하는 데 귀하 가 오래 걸리지 만) 어떻게 경영진에게 설명 할 것입니까? , 그들이 할 수 있다는 것을 알았 기 때문에? 그것은 사용자의 책임이 아닙니다 . 그래서 그들은 처음에 그것에 대한 권한을 가질 수 없습니다 .
역할에 대해 읽어보십시오.
역할에 개체 수준 권한을 부여한 다음 [많은] 사용자에게 해당 역할을 부여하십시오. 테이블을 수정할 때 관련 역할에 [재-] 권한 만 부여하면됩니다. 오라클은 이러한 권한을 관련 사용자에게 “계단식”처리합니다. 사용자 그룹마다 다른 “레벨”권한이 필요한 경우 여러 역할을 생성합니다.
댓글
- 이것들은 사실 일 수 있지만 스키마가 변경되는지, 환경이 개발인지 프로덕션인지에 대한 정보를 제공하지 않습니다. 개인 프로젝트 또는 그의 회사를위한 경우 '. 그의 실제 구문 관련 문제는 결코 해결하지 않습니다.