Solução :
grants :
GRANT EXECUTE ON DBMS_METADATA TO user_unable_to_see ;
GRANT CREATE ANY PROCEDURE TO user_unable_to_see;
Cabe analisar a segurança ao conceder os privilégios acima.
Oks?!!
Julio Cesar Correa
Showing posts with label plsql. Show all posts
Showing posts with label plsql. Show all posts
Tuesday, October 26, 2010
Wednesday, September 22, 2010
PL/SQL - wrapping/obfuscating objects
Preciso escrever um post um pouco mais detalhado,mas por hoje vou deixar algumas linha de código por aqui.Acho que deve ajudar.
A palavra "Wrap" tem alguns significados dentre eles embrulhar ou envolver algo ,normalmente para protegê-lo.
No nosso caso iremos proteger nosso codigo.
Pois bem " wrapping" é diferente de "encrypting" .Uma vez tendo um wrapped object você não consegue mais desfaze-lo* .
Para trabalhar com criptografia existem outros pacotes no Oracle que não iremos entrar em detalhe agora,mas se você procura por isso pode encontrar alguns detalhes em :
Usando wrap utility :
Tenho um arquivo ".sql" que contem o codigo da minha procedure em pl/sql.
$ ls |grep my_p
my_proc.sql
jccorrea|arvato28 ~/Documents
$
jccorrea|arvato28 ~/Documents
$ wrap iname=my_proc.sql
PL/SQL Wrapper: Release 11.2.0.1.0- Production on Thu Sep 23 19:01:15 2010
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing my_proc.sql to my_proc.plb
jccorrea|arvato28 ~/Documents
$ more my_proc.plb
CREATE OR REPLACE PROCEDURE my_procfoo wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
43 79
If0FucdLbueE4p3U0uRQWu+lr9Awg5nnm7+fMr2ywFyFO1+WFpeu3NlywcB0iwlp523+mYFc
pdKZUjK/ssKLwMAy/tLWmboxxXXFVMe+kr5UgqampybzvA==
/
jccorrea|arvato28 ~/Documents
$
Feito isso você pode rodar o arquivo my_proc.plb para criar a procedure.
Usando a package DBMS_DDL
Usando a package dbms_ddl podemos usar o objeto create_wrapped para fazer a mesma coisa que fizemos acima :
SQL> declare
my_ddl varchar2(150) ;
begin
my_ddl := 'create or replace procedure my_procfoo as v_num integer; begin v_num := 5 ; end;' ;
dbms_ddl.create_wrapped(my_ddl);
end ; 2 3 4 5 6
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
SQL> select TEXT
from all_source
where name = 'MY_PROCFOO'
and type = 'PROCEDURE' 2 3 4
5 /
TEXT
--------------------------------------------------------------------------------
procedure my_procfoo wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
TEXT
--------------------------------------------------------------------------------
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
3f 75
IpCGLNo/BDIha28AwTNsfGHp6Cgwg5nnm7+fMr2ywFyFO1+WFpeu3Nly6rh0K+dt/pmBXKXS
mVIyv7LCK7jAMv7S1p6jMcV1xVTVU5K+VIKmphHX89g=
TEXT
--------------------------------------------------------------------------------
Elapsed: 00:00:00.06
SQL>
Em um próximo post trateremos o assunto de criptografia !
Abs,
JC
/
jccorrea|arvato28 ~/Documents
$
Feito isso você pode rodar o arquivo my_proc.plb para criar a procedure.
Monday, January 11, 2010
Object Tables - Exemplos usando Oracle 10gR2(10.2.0.4)
Alguém já usou object tables no Oracle?
Vou mostrar alguns exemplos usando Oracle 10g.
Object table nada mais é que uma tabela criada com base em um tipo definido pelo usuário ou user-defined types um conceito bem conhecido das famosas Classes em Orientação a Objetos popular OO.
Desde a versão 8 do Oracle é possível trabalhar com OO nos códigos PL/SQL e armazenamento dentro do banco de dados.Da versão 8 até a versão atual 11g estas características foram melhoradas.Podemos trabalhar com conceito de classe,atributos e métodos bem como herança ,funções e contrutores dentre outras.
Uma vez definido um TYPE podemos utilizá-los de várias formas e entre elas a de criar tabelas com base em tipos.
Criando um object type :
dbajcc@OCADB on 11-JAN-10 >create type t_dbf as object(file_name varchar2(50),tablespace_name varchar2(30));
2 /
Type created.
Elapsed: 00:00:00.38
Criando uma object table :
dbajcc@OCADB on 11-JAN-10 >create table tst_dbf_obj of t_dbf ;
Table created.
Elapsed: 00:00:00.70
Uma vez definido um TYPE podemos utilizá-los de várias formas e entre elas a de criar tabelas com base em tipos.
Criando um object type :
dbajcc@OCADB on 11-JAN-10 >create type t_dbf as object(file_name varchar2(50),tablespace_name varchar2(30));
2 /
Type created.
Elapsed: 00:00:00.38
Criando uma object table :
dbajcc@OCADB on 11-JAN-10 >create table tst_dbf_obj of t_dbf ;
Table created.
Elapsed: 00:00:00.70
Inserindo dados em uma object table :
dbajcc@OCADB on 11-JAN-10 >insert into tst_dbf_obj select file_name,tablespace_name from dba_data_files ;
6 rows created.
Elapsed: 00:00:00.04
dbajcc@OCADB on 11-JAN-10 >commit;
Commit complete.
Elapsed: 00:00:00.02
dbajcc@OCADB on 11-JAN-10 >select * from tst_dbf_obj ;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ---------------
+DATA/ocadb/datafile/users.263.703360157 USERS
+DATA/ocadb/datafile/sysaux.259.703360021 SYSAUX
+DATA/ocadb/datafile/undotbs1.260.703360021 UNDOTBS1
+DATA/ocadb/datafile/system.257.703360021 SYSTEM
+DATA/ocadb/datafile/example.261.703360021 EXAMPLE
+DATA/ocadb/datafile/teste_rename.262.703360117 TESTE_RENAME
6 rows selected.
Elapsed: 00:00:00.01
Também é possível criar constraints em object tables tais como Primary Keys (PK's) e Check constraints .
No exemplo abaixo vamos criar uma object table com uma coluna identificadora :
dbajcc@OCADB on 11-JAN-10 >create type t_automovel as object (id number(2),nome varchar2(10),marca varchar2(15));
2 /
Type created.
Elapsed: 00:00:00.05
dbajcc@OCADB on 11-JAN-10 >
dbajcc@OCADB on 11-JAN-10 >create table frota_taxi of t_automovel (id PRIMARY KEY)
2 object identifier is primary key ;
Table created.
Table created.
Elapsed: 00:00:00.13
dbajcc@OCADB on 11-JAN-10 >
Você NÃO PODE excluir um TYPE caso exista um outro objeto definido com base nele :
dbajcc@OCADB on 11-JAN-10 >drop type t_automovel ;
drop type t_automovel
*
ERROR at line 1:
ORA-02303: cannot drop or replace a type with type or table dependents
Elapsed: 00:00:00.02
Pirmeiro excluímos os dependentes e depois eliminamos o tipo:
dbajcc@OCADB on 11-JAN-10 >drop table frota_taxi ;
Table dropped.
Elapsed: 00:00:00.81
dbajcc@OCADB on 11-JAN-10 >drop type t_automovel ;
Type dropped.
Elapsed: 00:00:00.58
dbajcc@OCADB on 11-JAN-10 >
Podemos fazer o uso das object tables que possuem colunas que também são objetc types :
dbajcc@OCADB on 11-JAN-10 >create type t_bolas_sena
as object (first number(2),second number(2),third number(2),
fourth number(2),fifth number(2),sixth number(2)) ;
/ 2 3 4
Type created.
Elapsed: 00:00:00.06
dbajcc@OCADB on 11-JAN-10 >
--criar um objeto com os atributos de um resultado de jogo da mega sena
dbajcc@OCADB on 11-JAN-10
create type t_resultado_sena
as object( concurso number(4),
local_sorteio varchar2(50),
bolas_sena t_bolas_sena ) ;
/dbajcc@OCADB on 11-JAN-10 >dbajcc@OCADB on 11-JAN-10 > 2 3 4 5
Type created.
Elapsed: 00:00:00.05
dbajcc@OCADB on 11-JAN-10 >
--criação de uma object table que armazena o type t_resultado_sena
dbajcc@OCADB on 11-JAN-10 >
create table tb_resultado_sena of t_resultado_sena ;
/dbajcc@OCADB on 11-JAN-10 >dbajcc@OCADB on 11-JAN-10 >
Table created.
Elapsed: 00:00:00.05
dbajcc@OCADB on 11-JAN-10 >insert into tb_resultado_sena
values(t_resultado_sena(1141,
'TRAMANDAI/RS',
t_bolas_sena(09,37,40,50,58,60)
)
) ; 2 3 4 5 6
1 row created.
Elapsed: 00:00:00.01
dbajcc@OCADB on 11-JAN-10 >insert into tb_resultado_sena
(concurso,local_sorteio,bolas_sena)
values(1142,'PENEDO/AL',
t_bolas_sena(03,15,26,28,31,58)
) ; 2 3 4 5
1 row created.
Elapsed: 00:00:00.00
dbajcc@OCADB on 11-JAN-10 >
dbajcc@OCADB on 11-JAN-10 >commit ;
Commit complete.
Elapsed: 00:00:00.01
dbajcc@OCADB on 11-JAN-10 >
dbajcc@OCADB on 11-JAN-10 >select * from tb_resultado_sena tbs where tbs.concurso = 1142 ;
CONCURSO LOCAL_SORTEIO
---------- --------------------------------------------------
BOLAS_SENA(FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1142 PENEDO/AL
T_BOLAS_SENA(3, 15, 26, 28, 31, 58)
Elapsed: 00:00:00.03
dbajcc@OCADB on 11-JAN-10 >select * from tb_resultado_sena ;
CONCURSO LOCAL_SORTEIO
---------- --------------------------------------------------
BOLAS_SENA(FIRST, SECOND, THIRD, FOURTH, FIFTH, SIXTH)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1141 TRAMANDAI/RS
T_BOLAS_SENA(9, 37, 40, 50, 58, 60)
1142 PENEDO/AL
T_BOLAS_SENA(3, 15, 26, 28, 31, 58)
Elapsed: 00:00:00.02
Dúvidas ou sugestões ?Poste o seus comentários!
Abs,
Julio Cesar Correa
Marcadores:
class,
classes,
object tables,
objects,
oracle,
orientação,
pl/sql,
plsql,
types
Subscribe to:
Posts (Atom)