D&G 0 Denunciar post Postado Dezembro 7, 2006 Olá pessoal, executar o seguinte procedure:PROCEDURE Creacaois--Cursoresc_create integer;--Variaveisv_insert varchar2(50);v_create long;v_return number;BEGIN c_create := dbms_sql.open_cursor; v_create := 'create table teste (id number)'; dbms_sql.parse(c_create,v_create, dbms_sql.native); v_return := dbms_sql.execute(c_create); dbms_output.put_line('EXEC'); dbms_output.put_line (v_return); END; -- ProcedureErros:ORA-01031: insufficient privilegesORA-06512: at line 7PS. Detalhe, segundo a minha Dba eu estou com usuario que tem todos os privilegios. Outra coisa todos os outros comando DDL passam, menos o create.Por favor, se alguem sabe como resolver, me ajudem Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 8, 2006 Faltou algum privilegio , tipo executar procedure, criar tables etc. Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 8, 2006 Bom, No seu caso, realmente está faltando algum GRANT a conceder ao usuário que está executando a procedure. Seja de CREATE TABLE, EXECUTE, QUOTA em tablespaces e etc... Mas, existe um modo mais fácil de fazer isso, veja: SQL*Plus: Release 10.2.0.1.0 - Production on --- Dez 8 10:56:06 2006Copyright (c) 1982, 2005, Oracle. All rights reserved.SQL> conn systemInforme a senha:Conectado. SQL> create or replace procedure criacao 2 is 3 txtNome varchar2(100); 4 begin 5 execute immediate 'CREATE TABLE x (a varchar2(10))'; 6 end; 7 /Procedimento criado.SQL> exec criacao();Procedimento PL/SQL concluÝdo com sucesso.SQL> select * from x;nÒo hß linhas selecionadasSQL> desc X Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- A VARCHAR2(10)SQL> Eu executei o exemplo com o usuário SYSTEM, para seu usuário poderá conceder os grants que mencionei acima ou apenas agregar as regras (ROLE) CONNECT e RESOURCE ao usuário. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
D&G 0 Denunciar post Postado Dezembro 11, 2006 Faltou algum privilegio , tipo executar procedure, criar tables etc. Pois eh pessoal, tudo leva a crer que falta algum GRANT, porem qdo eu executo so o create table fora da procedure, na mesma sessão do oracle, ele passa normalmente e mais..... qdo eu troco o comando create por alter, drop ou truncate table e executo a procedure ela é executada com sucesso.... !!!Pensei en falta de GRANT para o Create table, mas consigo fazer por fora, pensei entao em falta de GRANT para a execução da procedure, mas se troco o comando ela roda com sucesso. Ja pensei que pode ser alguma coisa no proprio pacote DBMS_sql.Que acham????? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 11, 2006 ... mas se troco o comando ela roda com sucesso. ... O que você quis dizer com isto ? Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 11, 2006 Tambén não entendi a troca de comando, pois quando se concede um grant de CREATE TABLE ao usuário, ele automaticamente, já tem permissão para ALTER TABLE e DROP TABLE para tabela que criar. O CREATE TABLE é como se fosse um conjunto de privilegios para tabela. E como assim, alterar o comando ele executa normal? http://forum.imasters.com.br/public/style_emoticons/default/searchbeforeposting.gif Abraços, http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif Compartilhar este post Link para o post Compartilhar em outros sites
D&G 0 Denunciar post Postado Dezembro 11, 2006 Tambén não entendi a troca de comando, pois quando se concede um grant de CREATE TABLE ao usuário, ele automaticamente, já tem permissão para ALTER TABLE e DROP TABLE para tabela que criar. O CREATE TABLE é como se fosse um conjunto de privilegios para tabela. E como assim, alterar o comando ele executa normal? http://forum.imasters.com.br/public/style_emoticons/default/searchbeforeposting.gif Abraços, http://forum.imasters.com.br/public/style_emoticons/default/graduated.gifvejam se eu criar a table por fora da procedurecreate table teste (id number)---Table Criada ---Depois eu vou na procedure e so troco o mando create table, por Drop ou truncate table, na linha de codigo a baixo.......v_create := 'drop table teste';......A procedure é executada normalmente, sem erros de privilegios.ou seja, so nao funciona com o create, entendi ??DG :-) Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 11, 2006 Falta o grant de drop table , creio , o grant de create é diferente do do drop. Já tentou criar via procedure ou dropar fora dela ? Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 11, 2006 O grant DROP TABLE e ALTER TABLE já fazem parte do CREATE TABLE. Vou fazer desde o início e todos os comandos necessarios para executar. veja: SQL*Plus: Release 10.2.0.1.0 - Production on Seg Dez 11 14:32:16 2006Copyright (c) 1982, 2005, Oracle. All rights reserved.SQL> conn systemInforme a senha:Conectado.SQL> create user RODRIGOALMEIDA 2 identified by imasters 3 default tablespace USERS 4 temporary tablespace TEMP;Usuário criado.SQL> grant create session, create table to RODRIGOALMEIDA;Concessão bem-sucedida.SQL> alter user RODRIGOALMEIDA quota 10M on USERS;Usuário alterado.SQL> grant create procedure to RODRIGOALMEIDA;Concessão bem-sucedida.SQL> disconnectDesconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - ProductionSQL> connect RODRIGOALMEIDA/IMASTERSConectado.SQL> show userUSER É "RODRIGOALMEIDA"SQL> host notepad teste_proc.sqlSQL> get teste_proc 1 CREATE OR REPLACE PROCEDURE Creacao 2 is 3 --Cursores 4 c_create integer; 5 --Variaveis 6 v_insert varchar2(50); 7 v_create long; 8 v_return number; 9 BEGIN 10 c_create := dbms_sql.open_cursor; 11 v_create := 'create table teste (id number)'; 12 dbms_sql.parse(c_create,v_create, dbms_sql.native); 13 v_return := dbms_sql.execute(c_create); 14 dbms_output.put_line('EXEC'); 15 dbms_output.put_line (v_return); 16* END; 17 /Procedimento criado.SQL> exec creacao();Procedimento PL/SQL concluído com sucesso.SQL> select * from teste;não há linhas selecionadasSQL> desc teste; Nome Nulo? Tipo ----------------------------------------- -------- ---------------------------- ID NUMBERSQL> drop table TESTE;Tabela eliminada.SQL> select * from teste;select * from teste *ERRO na linha 1:ORA-00942: a tabela ou view não existeSQL> create table teste (id number);Tabela criada.SQL> select * from teste;não há linhas selecionadasSQL> drop table teste;Tabela eliminada.SQL> exec creacao();Procedimento PL/SQL concluído com sucesso.SQL> select * from teste;não há linhas selecionadasSQL> insert into TESTE values (001);1 linha criada.SQL> commit;Commit concluído.SQL> select * from teste; ID---------- 1SQL> Passo-a-passo: 1 - Criei um usuário chamado RODRIGOALMEIDA. 2 - Concedi permissão de criação de sessão e criação de tabelas. 3 - Alterei sua quota na tablespace USERS para 10MB. 4 - Concedi permissão de CRIAÇÃO DE TABELAS 5 - Criei a procedure que está postada no Fórum, não mudei nenhum código. 6 - Executei a procedure, com sucesso. 7 - Verifiquei que a tabela TESTE foi criada. 8 - Exclui a tabela, por comando, sem a procedure. 9 - Verifique se a tabela existe, sem sucesso. 10 - Criei a tabela FORA da procedure, com sucesso. 11 - Idem 7 12 - Idem 8 13 - Idem 6 14 - Idem 7 15 - Inseri linhas para teste. PRONTO! Sem segredos! Verifica se todo esse processo está sendo feitos com OBJETOS do seu USUÁRIO ou SCHEMA!!! Se tiver outros usuários, terá que ter permissões. O SELECT abaixo também pode lhe ajudar a fornecer mais informações sobre suas permissões: SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---RODRIGOALMEIDA CREATE PROCEDURE NORODRIGOALMEIDA CREATE TABLE NORODRIGOALMEIDA CREATE SESSION NO Caso tenha mais problemas, poste aqui. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
D&G 0 Denunciar post Postado Dezembro 12, 2006 Oie Rodrigo,Fiz o que você receitou, ate fiz pelo Sql Plus e veja o resultado:Conectado a:Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - ProductionWith the Partitioning, OLAP and Data Mining Scoring Engine optionsSQL> SHOW USER;USER é "TI_DENISE"SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---TI_DENISE UNLIMITED TABLESPACE NOSQL> EXEC CREACAO;BEGIN CREACAO; END;*ERRO na linha 1:ORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_SYS_SQL", line 906ORA-06512: at "SYS.DBMS_SQL", line 39ORA-06512: at "TI_DENISE.CREACAO", line 12qual o erro amigo???AbraçosDG Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 12, 2006 Denise, Seu usuário não tem todas as permissões que precisa, fale com o seu DBA para fornecer as seguintes permissões: CREATE TABLE CREATE PROCEDURE O comando está no último post que escrevi, só acompanhar passo a passo. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif Compartilhar este post Link para o post Compartilhar em outros sites
D&G 0 Denunciar post Postado Dezembro 12, 2006 Rodrigo, Vamos por parte, o usuario Ti_denise, ja está com estes privilegios, tanto que eu consigo CRIAR a PROCEDURE por ele e consigo criar tb a TABLE por ele, o que eu NÃO estou consiguindo é criar a tabela por dentro da procedure, pois qdo eu executo dá erro. Veja:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Conectado a:Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - ProductionWith the Partitioning, OLAP and Data Mining Scoring Engine optionsSQL> show userUSER é "TI_DENISE"SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---TI_DENISE UNLIMITED TABLESPACE NO 1 create PROCEDURE Creacao 2 is 3 c_create integer; 4 v_insert varchar2(50); 5 v_create long; 6 v_return number; 7 BEGIN 8 c_create := dbms_sql.open_cursor; 9 v_create := 'create table teste (id number)'; 10 dbms_sql.parse(c_create,v_create, dbms_sql.native); 11 v_return := dbms_sql.execute(c_create); 12 dbms_output.put_line('EXEC'); 13 dbms_output.put_line (v_return); 14* END; 15 /Procedimento criado.SQL> EXEC CREACAO;BEGIN CREACAO; END;*ERRO na linha 1:ORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_SYS_SQL", line 906ORA-06512: at "SYS.DBMS_SQL", line 39ORA-06512: at "TI_DENISE.CREACAO", line 10ORA-06512: at line 1SQL> create table teste (id number);Tabela criada.SQL> SELECT * FROM teste 2 /não há linhas selecionadas----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Passo a passo1 - Criei a procedure , a mesma do codigo (com sucesso) - logo o usuario tem permissao de criação de procedure2 - Executei a procedure, SEM sucesso (ERRO).3 - Criei a Table teste fora da procedure (com sucesso) - logo o usuario tem permissao de criação de tabela.entao, como pode ser observado, o erro ocorre qdo executo o create por dentro da procedure, usando o DBMS_SQL.PS. Volto a perguntar, pode ser alguma coisa com o pacote DBMS_SQL?Abraços amigosDG Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 12, 2006 O pacote DBMS_SQL é de uso público dentro do Oracle. Tem outra coisa pendente no seu ambiente. Seguinte, check outras informações: SQL> select * from user_role_privs;SQL> select * from user_role_privs;USERNAME GRANTED_ROLE ADM DEF OS_------------------------------ ------------------------------ --- --- ---PEC_PROD CONNECT NO YES NOPEC_PROD RESOURCE NO YES NOSQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---PEC_PROD CREATE VIEW NOPEC_PROD CREATE TABLE NOPEC_PROD CREATE SESSION NOPEC_PROD CREATE SYNONYM NOPEC_PROD CREATE SNAPSHOT NOPEC_PROD CREATE INDEXTYPE NOPEC_PROD CREATE PROCEDURE NOPEC_PROD UNLIMITED TABLESPACE NO Último caso, mande ela fornecer um GRANT explicíto no pacote DBMS_SQL. (Isso é besteira, mais as vezes, alteram alguma coisa!). SQL> grant execute on DBMS_SQL to PEC; Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif Compartilhar este post Link para o post Compartilhar em outros sites
D&G 0 Denunciar post Postado Dezembro 14, 2006 Problema resolvidos amigos.Era o seguinte:Mesmo o meu usuario ter os privilegios de CONNECT e RESOURCE e eu ter tentando ate mesmo com usuario com provilegios de DBA, o erro acontecia pq o pacote DBMS_SQL para funcionar, precisa que seja dado a premissões de Create Table explicitamente ao usuario, pois o pacote nao enxerga as permissões para as roles citadas a cima. Por este motivo eu conseguia criar a table por fora e nao conseguia criar por dentro da procedure usando o pacote.Encontrei esta explicação no Oracle MetaLink.Agradço a você e aos demais membro que me ajudaram.Grande AbraçoDG Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 14, 2006 + 1 BUG na lista do 10G. Se ele não enxerga os grants concedidos por ROLE, então pra quê serve ROLE!!! Fico indignado... hehehehhe na versão 8 e 9 não acontecia nada diss0. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif Compartilhar este post Link para o post Compartilhar em outros sites
D&G 0 Denunciar post Postado Dezembro 14, 2006 o Pior é que nao amigo.eu testei no 8 e 9, e acontee a mesma coisa, agora e faço uma outra pergunta, pq eles nao consertam logo isso ne?AbraçosDG Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Dezembro 14, 2006 Vou ser obrigado a concordar contigo!!! Testei numa versão 9i 9.2.0.4 e aconteceu o mesmo problema! Depois do GRANT explícito de CREATE TABLE ao usuário a procedure funcionou. AFFFFFFF!!! Cada coisa. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif Compartilhar este post Link para o post Compartilhar em outros sites