Yo uso Oracle 12c. Intento otorgar todos los privilegios de todas las tablas a un usuario. Y en el futuro no necesito agregar ningún privilegio a ese usuario. Necesito hacer esto. No quiero otorgar tablas del sistema a ese usuario. Escribí el comando pl / sql. pero da error.

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 

¿Cuál es el error? gracias.

Utilizo 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 

Comentarios

  • Intente agregar doble cotizaciones al propietario y nombre de la mesa. EJECUTAR INMEDIATAMENTE ' OTORGAR TODOS LOS PRIVILEGIOS EN " ' || t.owner || ' ". " ' || t.table_name || ' " TO GGSTEST ';
  • OTORGAR TODO EN IX.AQ $ _STREAMS_QUEUE_TABLE_L A GGSTEST; no es un error. Pero pl / sql, loop; da error.
  • luego intente esto: OTORGAR TODO EN IX. " AQ $ _STREAMS_QUEUE_TABLE_L " TO GGSTEST Si no ' no funciona, puede ser algo con la función de cola avanzada …
  • ¿Qué ' s el tipo de objeto? seleccione OBJECT_TYPE, STATUS De dba_objects donde owner = ' IX ' y object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
  • Lo intenté ' s funcionó. Tipo de estado = TABLA y estado = VÁLIDO

Respuesta

GRANT ALL PRIVILEGES ON .... es la sintaxis de MySQL privs.

Debe hacer:

GRANT ALL ON SCHEMA.TABLE TO USER 

Consulte la documentación .

Comentarios

  • Hola, enseñé que también era una sintaxis MySQL, pero: comprobar esto
  • grant all privileges to USERNAME es completamente diferente y es algo que abarca toda la base de datos.
  • Hay una sección titulada " Otorgar privilegios de objeto en una tabla a un usuario: Ejemplo "
  • En realidad, Dios lo sabe. No ' no tenga una base de datos a mano para probar: /
  • Da el mismo error ..

Responder

Es el comando correcto. Anteriormente, daba un error debido a las tablas de instalación de Oracle.

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; / 

Respuesta

el problema se debe a que PL / SQL interpreta los caracteres, como el signo de dólar o la etiqueta hash. Al agregar comillas dobles, ya no obtendrá el error.

Saludos.

Comentarios

  • tal vez hash. no ' no da error con el signo de dólar.
  • Excluyo los esquemas APEX, XDB, FLOW_FILES, ORDDATA y ' s funcionó.

Responder

Lo intento para otorgar todos los privilegios de todas las tablas a un usuario.

¿Por qué?

Y en el futuro no necesito agregar ningún privilegio a ese usuario.

Sí, lo hará.
Tan pronto como agregue otra tabla, debe repetir todo el proceso y debe hacerlo para todos y cada uno de los usuarios. Sugiero que este no es un uso eficiente de su tiempo.

Necesito hacer esto.

Aceptaremos no estar de acuerdo.

La vasta mayoría de los usuarios no necesitan (ni quieren) «todos los privilegios» en ninguna tabla; seleccionar, insertar, eliminar y actualizar es todo lo que necesitan y todo lo que deberían .
¿Cómo va a explicarle a su Gerencia cómo un sistema de producción falló (por el tiempo que le tome usted recuperarlo) porque algún Usuario, en algún lugar, decidió dejar caer una tabla , ¿sólo porque descubrieron que podían hacerlo? Eso «no es responsabilidad del Usuario, por lo que no debería tener permiso para ello en primer lugar.

Lea más sobre los roles.
Otorgue privilegios de nivel de objeto a un rol, luego otorgue ese rol a [muchos] usuarios. Cuando modifica tablas, sólo tiene que [reasignar] privilegios a los roles relevantes; Oracle se encargará de «conectar en cascada» esos privilegios a los Usuarios relevantes. Si necesita diferentes «niveles» de privilegios para diferentes grupos de usuarios, cree múltiples roles.

Comentarios

  • Si bien estas pueden ser cosas verdaderas, nunca da información sobre si el esquema está cambiando, si el env es desarrollo o producción, y si es ' s para un proyecto personal o su empresa. Nunca aborda su problema real relacionado con la sintaxis.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *