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.