.comment-link {margin-left:.6em;}

Tuesday, May 15, 2007

Criacao de Usuario Customizado (Duvida)


pessoal eu estou no oracle 10g e queria saber se existe a possibilidade de fazer o seguinte. Tenho uma tabela de usuário onde tem login e senha.. e gostaria de como ficaria a trigger após o insert para fazer um create user xxx identify by xxxx .... e dar o grant de create session to xxxx para o usuário do oracle...


E o exemplo completo.

ops$marcio:LX10G> connect / as sysdba
Connected.
sys:LX10G>
sys:LX10G> grant create user to ops$marcio;

Grant succeeded.

sys:LX10G> grant create session to ops$marcio with admin option;

Grant succeeded.

sys:LX10G>
sys:LX10G>
sys:LX10G> connect /
Connected.
ops$marcio:LX10G>
ops$marcio:LX10G> create table usuarios ( username varchar2(30), senha varchar2(30));

Table created.

ops$marcio:LX10G>
ops$marcio:LX10G> create or replace
2 procedure create_user (
3 p_username in usuarios.username%type,
4 p_senha in usuarios.senha%type
5 ) is
6 l_create long := 'create user '|| p_username ||' identified by '|| p_senha;
7 l_grant long := 'grant create session to '|| p_username;
8 begin
9 execute immediate( l_create );
10 execute immediate( l_grant );
11 end;
12 /

Procedure created.

ops$marcio:LX10G>
ops$marcio:LX10G> create or replace procedure run_create (
2 p_username in usuarios.username%type,
3 p_senha in usuarios.senha%type
4 ) is
5 pragma autonomous_transaction;
6 l_job number;
7 begin
8 dbms_job.submit( l_job, 'create_user( '''|| p_username ||''','''|| p_senha ||''');');
9 commit;
10 end;
11 /

Procedure created.

ops$marcio:LX10G>
ops$marcio:LX10G> create or replace trigger tgr_aifer_usuarios
2 after insert on usuarios
3 for each row
4 begin
5 run_create( :new.username, :new.senha );
6 end;
7 /

Trigger created.

ops$marcio:LX10G>
ops$marcio:LX10G> show user
USER is "OPS$MARCIO"
ops$marcio:LX10G>
ops$marcio:LX10G> insert into usuarios values ('novo_usuario', 'senha01');

1 row created.

ops$marcio:LX10G>
ops$marcio:LX10G> exec dbms_lock.sleep(5)

PL/SQL procedure successfully completed.

ops$marcio:LX10G>
ops$marcio:LX10G> select * from usuarios;

USERNAME SENHA
-------------------- ------------------------------
novo_usuario senha01

1 row selected.

ops$marcio:LX10G>
ops$marcio:LX10G> select username, password
2 from dba_users
3 where username = 'NOVO_USUARIO'
4 /

USERNAME PASSWORD
-------------------- ------------------------------
NOVO_USUARIO 25249E3F24F1A585

1 row selected.

ops$marcio:LX10G>
ops$marcio:LX10G> connect novo_usuario/senha01
Connected.
novo_usuario:LX10G>

Labels:


Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?