Eu uso oracle 12c. Tento conceder todos os privilégios de todas as tabelas a um usuário. E, no futuro, não preciso adicionar nenhum privilégio a esse usuário. Preciso fazer isso. Não quero conceder tabelas de sistema a esse usuário. Escrevi o comando pl / sql. mas dá erro.

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 

Qual é o erro? obrigado.

Eu uso 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 

Comentários

  • Tente adicionar o dobro citações para o proprietário e nome da mesa. EXECUTAR IMEDIATO ' CONCEDER TODOS OS PRIVILÉGIOS EM " ' || t.owner || ' ". " ' || t.table_name || ' " PARA GGSTEST ';
  • GRANT ALL ON IX.AQ $ _STREAMS_QUEUE_TABLE_L TO GGSTEST; não é um erro. Mas pl / sql, loop; ele dá erro.
  • então tente isto: GRANT ALL ON IX. " AQ $ _STREAMS_QUEUE_TABLE_L " PARA GGSTEST Se não ' não funciona, pode ser algo com o recurso Fila avançada …
  • O que ' s o tipo do objeto? selecione OBJECT_TYPE, STATUS de dba_objects onde owner = ' IX ' e object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
  • Tentei ' s funcionou. Tipo de status = TABELA e status = VÁLIDO

Resposta

GRANT ALL PRIVILEGES ON .... é a sintaxe privs do MySQL.

Você precisa fazer:

GRANT ALL ON SCHEMA.TABLE TO USER 

Consulte a documentação .

Comentários

  • Olá, também ensinei que era uma sintaxe do MySQL, mas: verifique isso
  • grant all privileges to USERNAME é completamente diferente e abrange todo o banco de dados.
  • Há uma seção intitulada " Concedendo privilégios de objeto em uma tabela para um usuário: Exemplo "
  • Na verdade, Deus sabe. Não ' não tenha um banco de dados à mão para testar: /
  • Ele dá o mesmo erro.

Resposta

É o comando certo. Anteriormente, apresentava erro por causa das tabelas de instalação do 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; / 

Resposta

o problema é devido aos caracteres sendo interpretados por PL / SQL, como o cifrão ou a hashtag. Ao adicionar aspas duplas, você não receberá mais o erro.

Atenciosamente.

Comentários

  • talvez hash. não ' não dá erro com o sinal de dólar.
  • Excluo APEX, XDB, FLOW_FILES, esquemas ORDDATA e ' s funcionou.

Resposta

Eu tento para conceder todos os privilégios de todas as tabelas a um usuário.

Por quê?

E no futuro, não preciso adicionar nenhum privilégio a esse usuário.

Sim, você irá.
Assim que adicionar outra tabela, você terá que repetir todo o processo e para cada um dos usuários. Eu sugeriria que este não é um uso eficiente do seu tempo.

Eu preciso fazer isso.

Nós concordaremos em discordar.

A vasta maioria dos usuários não precisa (ou deseja) de “todos os privilégios” em qualquer tabela; selecionar, inserir, excluir e atualizar é tudo que eles precisam e devem ser fornecido.
Como você vai explicar para sua gerência como um sistema de produção caiu (pelo tempo que você levar para recuperá-lo) porque algum usuário, em algum lugar, decidiu largar uma mesa , só porque descobriram que podiam? Isso “não é uma responsabilidade do usuário, então ele não deveria ter permissão para isso em primeiro lugar.

Leia sobre funções.
Conceda privilégios de nível de objeto a uma função e, em seguida, conceda essa função a [muitos] usuários. Quando você modifica tabelas, você só precisa [re-] conceder privilégios para a (s) função (ões) relevante (s); A Oracle cuidará de “cascatear” esses privilégios para os Usuários relevantes. Se você precisar de diferentes “níveis” de privilégio para diferentes grupos de usuários, crie várias funções.

Comentários

  • Embora essas sejam coisas verdadeiras, ele nunca dá informações sobre se o esquema está mudando, se o env é desenvolvimento ou produção, e se ' s para um projeto pessoal ou sua empresa. Você nunca aborda o problema real de sintaxe dele.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *