PROCEDURE COM EXECUTE IMMEDIATE

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
davidmeloboy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 05 Set 2008 1:53 pm
Localização: Parobé - RS
Contato:
David.

Olá Galera, tenho uma package que serve pra mim criar usuários no banco, alterar suas senhas e adiona-los nas roles e prófiles desejados através do forms ok?
Meu problema é o seguinte, na procedure add_role_select o usuário é adicionado normalmente, mas nas outras da o seguinte erro: admin option not granted for role!
E quando uso a procedure add_profile_user da o sequinte erro:

Selecionar tudo

missing user or role name.
Alguém sabe porque está dando isso?

Selecionar tudo

CREATE OR REPLACE PACKAGE BODY pck_username_oracle IS

	------------

	--CRIA USUÁRIO ORACLE
	PROCEDURE cria_username_oracle(p_username VARCHAR2
																,p_senha    VARCHAR2) IS
	BEGIN
		--  
		EXECUTE IMMEDIATE 'CREATE USER ' || p_username || ' IDENTIFIED BY ' || p_senha;
		--
	END cria_username_oracle;

	------------

	--ALTERA SENHA DO USUÁRIO ORACLE
	PROCEDURE altera_senha_username_oracle(p_username VARCHAR2
																				,p_senha    VARCHAR2) IS
	BEGIN
		--
		EXECUTE IMMEDIATE 'ALTER USER ' || p_username || ' IDENTIFIED BY  ' || p_senha;
		--
	END altera_senha_username_oracle;

	------------

	--ADD USUÁRIO NAS ROLES
	PROCEDURE add_role_select(p_username VARCHAR2) IS
	BEGIN
		EXECUTE IMMEDIATE 'GRANT role_select TO ' || p_username;
	END add_role_select;
	-- 
	PROCEDURE add_role_update(p_username VARCHAR2) IS
	BEGIN
		EXECUTE IMMEDIATE 'GRANT role_update TO ' || p_username;
	END add_role_update;
	--
	PROCEDURE add_role_insert(p_username VARCHAR2) IS
	BEGIN
		EXECUTE IMMEDIATE 'GRANT role_insert TO ' || p_username;
	END add_role_insert;
	-- 
	PROCEDURE add_role_delete(p_username VARCHAR2) IS
	BEGIN
		EXECUTE IMMEDIATE 'GRANT role_delete TO ' || p_username;
	END add_role_delete;
	-- 
	PROCEDURE add_profile_user(p_username VARCHAR2) IS
	BEGIN
		EXECUTE IMMEDIATE 'alter user ' || p_username || ' profile GRAFICO';
	END add_profile_user;
zenitram
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Dom, 16 Dez 2007 2:23 pm
Localização: sp
KBLO

Tente colocar no cabeçalho da procedure assim:

Selecionar tudo

CREATE OR REPLACE PACKAGE BODY pck_username_oracle  AUTHID CURRENT_USER IS IS 
-- vai verificar as permissões do usuario
davidmeloboy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 05 Set 2008 1:53 pm
Localização: Parobé - RS
Contato:
David.

coloquei no corpo da package

Selecionar tudo

CREATE OR REPLACE PACKAGE BODY pck_username_oracle AUTHID CURRENT_USER IS
na declaração não aceitou,
e deu o seguinte erro:

Selecionar tudo

conflicts with this use
joaogarcia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 91
Registrado em: Ter, 20 Mar 2007 7:19 pm
Localização: Campinas - SP
Contato:
Cordialmente,
João C. Garcia

Cara, acho q esse erro admin option not granted for role significa que você não tem controle administrativo pra conceder esses privilégios.

Dá uma pesquisada em WITH ADMIM OPTION e WITH GRANT OPTION.

Talvez você precise falar com seu DBA aí.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes