Re: RES: RES: RES: [oracle_br] Conceder permissao a todos objetod de

2007-07-24 Por tôpico Josir Gomes
Oi Chiappa,

agora eu peguei o seu raciocínio - a forma de implementar isso 
dependeria de inúmeras parafernálias tipo SQL dinâmico.
Sobre a queda de performance de SQLs dinâmicos, eu nem preciso ir no 
Asktom.
Eu já fiz muitos testes e comprovo o que vc diz em número, genero e grau.

Mas siga o meu raciocínio e cenário.

GRANT SELECT tabela TO role

Quando vc dá GRANT role TO USER usuario, o acesso a tabela pelo 
usuário é automático, correto?
Vc não precisa ter SQL dinâmicos ou qq outra parafernália para que o 
usuário passe a enxergar a tabela.

Porque não existir o mesmo automatismo para um GRANT SELECT ON ANY TABLE 
to role?
Repare que no meu caso hipotético, o usuário só irá consultar as 
tabelas: imagine, por exemplo, um Dataware House.

Em ambientes muito dinâmicos, o processo de criação de tabelas é 
constante e muitas vezes não existe um AD só para ficar controlando isso.
Se houvesse algo automático, vc teria uma tarefa a menos para dar a ele.

Isso me lembra uma visita em uma empresa em que o prazo para criar um 
campo em uma tabela era de 1 mês
Quando chegamos e começamos a criar uma tabela por dia (com seus 
respectivas telas de manutenção), o usuário pirou e passou a nos amar 
eternamente :)))

Antes que me crucifixem por estas afirmações, recomendo a todos o livro 
Refactoring Database do Scott Ambler (o das metodologias ágeis)
http://www.agiledata.org/essays/databaseRefactoring.html


Sobre o Metalink: esse é um tema polêmico!!!

Eu até teria verba para comprar mas não concordo com os termos da Oracle.
É uma questão de principio. Se vc compra um produto Oracle, vc deveria 
ter automaticamente acesso ao Metalink sem ter que pagar a mais por isso.

Até a Microsoft e a Apple que são os piores casos de desrespeito ao 
consumidor tem seus equivalentes de Metalink abertos para quem compra 
os produtos deles.
Por isso, eu pago R$10mil a um consultor mas não pago R$3mil pelo Metalink.

Um abraço,
Josir.



 O porquê de não ser a melhor opção, em primeiro lugar é por que pra
 implementar isso vc VAI TER QUE, como eu disse, criar triggers/jobs
 que criem SQLs dinâmicos com DDL, e há imposto de performance se
 houver abuso tanto para SQL dinâmico (parses extras) quanto para DDLs


[As partes desta mensagem que não continham texto foram removidas]



Re: RES: RES: RES: [oracle_br] Conceder permissao a todos objetod de

2007-07-24 Por tôpico jlchiappa
Sim Josir, principalmente o custo em performance pra se implantar esse
tipo de admin é que me leva à contra-recomendá-lo. No seu argumento, a
primeira coisa é que SELECT ANY é um exemplo infeliz, ANY significa **
QUALQUER ** uma no banco de dados, evidentemente INCLUINDO as tabelas
internas do SYS - que ÓBVIO possuem senhas, códigos SQL recursivos do
banco e muitas outras cositas más, nem preciso dizer mais pra se
perceber que ROMBO de segurança potencial pode ser SELECT ANY TABLE na
mão de usuário final... Assim, suporei que na verdade o que vc queria
dizer é SELECT em um nível acima de tabelas, em algo que AGRUPE
tabelas, o que poderia ser um SCHEMA (como citado na thread) ou uma
TABLESPACE, ambos podem possuir n tabelas internamente, são
agrupadores naturais de tabelas. Tecnicamente penso que não haveria
nenhum grande impedimento pra Oracle implementar algo do tipo,  sei
inclusive que na pesquisa de new features quea Oracle sempre faz a
cada release isso tinha sido citado, e na thread
http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:48704116042682#49132370956407
também havia - acho então que ela não fez porque foi considerada uma
feature de raro uso, o número de usuários que pediram issso, que
precisavam disso deve ter sido inferior à de outras... Na minha
experiência mesmo isso aconteceu, já que via de regra, num sistema COM
PREOCUPAÇÔES de segurança, NÂO È regra que qualquer um possa ler
qualquer informação, NECESSARIAMENTE há várias e várias tabelas onde
há apenas uma porção dos registros que uma pessoa pode ler, há várias
a várias tabelas que não podem ser lidas por qquer um, enfim, há **
muito MAIS ** tabelas que não são públicas do que tabelas
públicas... E mesmo esse conceito de públicas eu questiono, afinal
um database em tese serve (ou pode servir) a MAIS DE UM APLICATIVO, se
vc tiver um automatismo desses implantado isso implica que não só
qualquer um, mas QUALQUER aplicativo pode ler, não me parece uma
situação comum, segura e estabelecida isso Isso também tem relação
com PERFORMANCE, pois uma tabela pública desse tipo ** implica **
que qualquer um pode fazer qualquer tipo de SELECT retornando qualquer
qtdade de dados a qualquer hora - HUMMM, eu administro um DW, sabe vc
quando eu vou deixar que a maioria das minhas tabelas (que são
GRANDES, que EXIGEM que sejam especificados determinados campos no
WHERE pra que seja usado eliminação de particionamento, etc) possam
ser consultadas por qualquer um a qualquer hora ?? No dia que chover
canivete aberto... E o ponto final contrário a automatismos do tipo é
que eles são INCLUSIVOS, ie, vc passa a ter um default de DAR o
privilégio antes mesmo que a pessoa precise, ao invés de trabalhar com
o conceito de PRIVILÈGIOS MÍNIMOS, isso torna MUITO MAIS FÁCIL imho o
DBA esquecer de programar as exceções e nenguinho acabar recebendo o
que não precisa/não pode, já que sem fazer nada todo mundo já recebe
privs automagicamente... NO caso do teu cliente onde levava um Mês pra
adicionar uma coluna isso é TÃO CASO DE MÁ ADMINISTRAÇÂO quanto o caso
onde isso é feito num zás-trás,  SEM análise de segurança, SEM análise
de performance (sim, novas colunas PODEM influenciar o CBO...), ambos
simplesmente são reversos do mesmo caso de má-admin Se máxima
performance, máxima segurança e mínimo desperdício (evitando se
adicionar a mesma coluna com mesma info em vários lugares, ou com
datatypes diferentes/não ótimos) são desejados, há ** SIM ** que se
ter um DA e/ou um DBA que vão SIM levar um pouco de tempo pra fazer a
análise adequada, isso é INVESTIMENTO (perde-se um pouco de tempo MAS
ganha-se confiabilidade), só não pode ser algo resvalando pro absurdo
como o caso citado...
  Sobre o metalink : ok, entendo o seu ponto, só o que digo é sejamos
contra ou a favor o fato é que NÂO é essa a política da Oracle, E SE
vc (por princípios ou o que for) não investir os mil reais mínimos que
mais ou menos custariam um acesso ao menos de consulta no metalink, **
não só ** vc vai pagar (e mais de uma vez!!) dez vezes isso pra um
consultor, mas também VAI (por falta de acesso ao database de bugs)
cair em bugs que vão te fazer perder tempo e dinheiro, NÂO VAI usar
determinadas features em modo top de otimização (pois é quase só no
metalink que vc acha artigos importantes sobre algumas feaures), NÃO
VAI receber algumas recomendações e soluções de casos que só lá
existem caso seja assim que vc vai administrar ok, nada contra, só
fique ciente do ônus que vc vai incorrer.

[]s

 Chiappa
--- Em oracle_br@yahoogrupos.com.br, Josir Gomes [EMAIL PROTECTED] escreveu

 Oi Chiappa,
 
 agora eu peguei o seu raciocínio - a forma de implementar isso 
 dependeria de inúmeras parafernálias tipo SQL dinâmico.
 Sobre a queda de performance de SQLs dinâmicos, eu nem preciso ir no 
 Asktom.
 Eu já fiz muitos testes e comprovo o que vc diz em número, genero e
grau.
 
 Mas siga o meu raciocínio e cenário.
 
 GRANT SELECT tabela TO role
 
 Quando vc dá GRANT role TO USER 

RES: RES: RES: [oracle_br] Conceder permissao a todos objetod de UM schema

2007-07-23 Por tôpico Renan Nucci - CSM Software
Então Chiappa, o uso de INVOKER RIGHTS não é para eu executar o corpo da
procedure com as permissões do usuário logado e não com usuário que eh o
owner da procedure??

 Por default ele pega as permissões do owner.. 

 

Tem alguma forma de eu habilitar para que os grants das roles funcionem como
explícitos???

 

Bom o site que vi que isso era um bug é esse aqui:

http://www.imasters.com.br/forum/lofiversion/index.php/t206115.html

 

 

atenciosamente, 

 

 

Renan Nucci

Desenvolvedor C#

CSM Software

Msn: [EMAIL PROTECTED]

 

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de jlchiappa
Enviada em: sexta-feira, 20 de julho de 2007 18:24
Para: oracle_br@yahoogrupos.com.br
Assunto: Re: RES: RES: [oracle_br] Conceder permissao a todos objetod de UM
schema

 

Renan, obviamente o .BAT *** não sabe *** nada vezes nada a respeito
de linguagem SQL, de PL/SQL, de banco, ele NÂO é parte do banco nem
foi feito pela Oracle... Só o que ele sabe é processar comandos
próprios e/ou chamar executáveis, o que ocorre é que quem SABE
executar SQLs e PL/SQLs é o sql*plus, que é SIm um programa executável
e portanto pode ser executado a partir do BAT... A sequ~encia
portanto é o .BAT chama o sqlplus que executa a tua rotina , ok ? Isso
eu cito como complemento do seu conhecimento, já que vc não vai usar o
BAT , pelo que diz, então tá...
No caso de procedure, rigorosamente NÂO, esse comportamento NÃO É
BUG, é o comportamento default DOCUMENTADO NO MANUAL DE
DESENVOLVEDORES, como citado em
http://asktom.oracle.com/tkyte/Misc/RolesAndProcedures.html, quem te
falou que é bUG falou uma asneira sem tamanho... Diga aí que site que
é esse, que a gente já marca como fonte de DESinformação... Como
citado no link, o fato é que no default quando vc cria um stored
PL/SQL (seja procedure, function, package ou trigger) as roles são
DESABILITADAS durante a execução, o GRANT precisar ser direto, OU em
alguns casos vc pode mudar o default da identificação de privs dentro
do seu stored PL/SQL, veja no manual de PL/SQL sobre INVOKER RIGHTS.

[]s

Chiappa
--- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br
, Renan Nucci - CSM Software
[EMAIL PROTECTED] escreveu

 Clayton, o bat eu sei fazer, o q não sei eh fazer a chamada a ele
sem ser
 pelo SQL plus... mas acho q não vou precisar fazer o bat.. 
 
 
 
 Chiappa, essa solucao que vc me ofereceu eu estava escrevendo ela
quando vc
 mando... pelo menos estou pensando como os grandes.. RSS
 
 
 
 Agora estou me deparando com um problema de privilégios.. 
 
 Eu executando esse GRANT dentro da procedure eu recebo uma mensagem
de erro
 alegando privilégios insuficientes, mas executando por fora dela eu
consigo
 na boa... Este teste estou fazendo com o usuário que eh dono da
procedure.. 
 
 
 
 Andei vendo sobre este erro e vi um site dizendo que eh um bug do
Oracle,
 que não reconhece as permissões vindas de um role e somente as
explicitas ao
 user.. isso se confirma??
 
 
 
 
 
 atenciosamente, 
 
 
 
 
 
 Renan Nucci
 
 Desenvolvedor C#
 
 CSM Software
 
 Msn: [EMAIL PROTECTED]
 
 
 
 De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br 
[mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br
] Em
 nome de Clayton Rocha
 Enviada em: sexta-feira, 20 de julho de 2007 14:57
 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br

 Assunto: RES: RES: [oracle_br] Conceder permissao a todos objetod de UM
 schema
 
 
 
 O que você pode fazer é um arquivo BAT que executa automaticamente esse
 script... te resolve a situação? Sabe fazer? Quer ajuda?
 
 []'s
 
 Clayton
 
 De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br
mailto:oracle_br%40yahoogrupos.com.br
 [mailto:oracle_br@yahoogrupos.com.br
mailto:oracle_br%40yahoogrupos.com.br 
mailto:oracle_br%40yahoogrupos.com.br
 ] Em
 nome de Renan Nucci - CSM Software
 Enviada em: sexta-feira, 20 de julho de 2007 14:35
 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br

mailto:oracle_br%40yahoogrupos.com.br 
 Assunto: RES: RES: [oracle_br] Conceder permissao a todos objetod de UM
 schema
 
 Eu não tinha conhecimento dos comandos que me foi passado tive de
dar uma
 pesquisada para ver o que fazem.. 
 
 Eu só consigo executar esse procedimento via SQL Plus? Não tem outra
forma
 de adicionarmos permissão para um schema inteiro então?
 
 atenciosamente, 
 
 Renan Nucci
 
 Desenvolvedor C#
 
 CSM Software
 
 Msn: [EMAIL PROTECTED] mailto:renanxr3%40hotmail.com
 mailto:renanxr3%40hotmail.com 
 
 De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br
mailto:oracle_br%40yahoogrupos.com.br
 mailto:oracle_br%40yahoogrupos.com.br
 [mailto:oracle_br@yahoogrupos.com.br
mailto:oracle_br%40yahoogrupos.com.br 
mailto:oracle_br%40yahoogrupos.com.br
 mailto:oracle_br%40yahoogrupos.com.br
 ] Em
 nome de jlchiappa
 Enviada em: sexta-feira, 20 de julho de 2007 13:12
 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br

Re: RES: RES: RES: [oracle_br] Conceder permissao a todos objetod de

2007-07-23 Por tôpico Josir Gomes
Chiappa,
me interessei pelo post :)

1) Vc podia dissertar sobre o porque não se deve administrar a segurança 
dessa forma. Se um grupo de usuários tiver sempre direito a SELECT em 
uma base, porque não utilizar o fictício:

GRANT SELECT ON [schema] to [role]

Acho que isso tá mais para uma limitação do Oracle (facilmente 
contornável, eu sei, mas ainda assim uma limitação).

2) Como eu não tenho acesso ao Metalink, vc poderia falar mais sobre 
esse artigo How to Automate Grant
Operations When New Objects Are Created in a SCHEMA/DATABASE ?

Um abraço,
Josir.
-
Não, não tem GRANTs a nível de schema, não é assim que se deve
administrar segurança num bd Oracle.
Porém, apenas para complementar, o que ele em tese ** PODE ** sim
fazer pra obter um automatismo do tipo, se for o caso, poderia ser:

a) ter uma TRIGGER que após o DDL de criação do objeto faz o GRANT
(como triggers de DDL tem restrições à SQL dinâmico, usar uma tabela
de jobs cfrme mostrado na nota 210693.1 How to Automate Grant
Operations When New Objects Are Created in a SCHEMA/DATABASE do
Suporte Oracle/metalink


Re: RES: RES: RES: [oracle_br] Conceder permissao a todos objetod de

2007-07-23 Por tôpico jlchiappa
O porquê de não ser a melhor opção, em primeiro lugar é por que pra 
implementar isso vc VAI TER QUE, como eu disse, criar triggers/jobs 
que criem SQLs dinâmicos com DDL, e há imposto de performance se 
houver abuso tanto para SQL dinâmico (parses extras) quanto para DDLs 
(invalidação de objs, etc), e rotina automática vai ser executada 
SEMPRE, é porta aberta pra abusos... Pesquise em asktom.oracle.com 
para refs e exemplos de DDLs e SQLs dinãmicos em relação à queda de 
performance. O segundo ponto é em relação à Administração, 
inicialmente não me entra que possa haver segurança AUTOMÁTICA, ie, 
sem que nem o DBA nem o DA analisem a tabela recém-criada já seria 
automaticamente liberado SELECT ou o que for... Além disso, em vc 
tendo um schema/usuário dono da aplicação é um schema só que vc tem 
que proteger a senha, é um schema só que vc tem que auditar 
diferentemente... Aliás, no caso lá de DBA e DA analisarem CADA 
criação/alteração em Produção é ** crítico ** se vc quer Máxima 
segurança e Máxima performance, e procedimentos automágicos do tipo 
sempre me parecem vias de escape á isso... São basicamente estas as 
razões do meu conselho.
 Quanto à nota, antes de a citar uma dica : como já referido algumas 
vezes aqui no Grupo mesmo, vc pode obter acesso a QUALQUER dos textos 
do metalink registrando/suportando qquer produto Oracle, até o mais 
baratinho deles - assim, se vc ainda não tem nem sequer acesso aos 
textos do metalink, dada a ENORME importância de se ter acesso à 
isso, eu recomendo FORTEMENTE que vc tente obter,explique a quem de 
direito, recomendo esse (pequeno!) investimento pro teu patrão, há 
documentos ali que por si só resolvem problemas dificílimos no banco, 
que dão dicas PRECIOSAS, eu considero o metalink como parte da 
Documentação do banco... Na nota a idéia básica é a seguinte : quando 
uma trigger de DDL dispara (ao menos no 9i, não testei no 10g mas 
creio que é o mesmo) vc ** não ** recebe nas variáveis de sistema da 
trigger o SQL exato mas recebe um evento dizendo se é CREATE ou o que 
foi o DDL, e recebe o owner, tipo e nome do objeto sendo DDLzado - o 
procedimento é vc inserir essas infos numa tabela sua e imediatamente 
após disparar um job Oracle que leia a tabela e faça o GRANT : no 
exemplo da nota ele ainda resgata o SQL completo na V$SQL e 
derivadas, mas no caso discutido no grupo o que o colega lá queria é 
uma lógica simples, se é CREATE e o owner (schema) é X, então faça um 
GRANT SELECT pra uma determinada lista fixa de usuários (ou mais 
adequadamente pra uma role), pra essa lógica simplesm acho que o 
passo de recuperar o SQL é dispensável...
 
 []s
 
  Chiappa
  
--- Em oracle_br@yahoogrupos.com.br, Josir Gomes [EMAIL PROTECTED] escreveu

 Chiappa,
 me interessei pelo post :)
 
 1) Vc podia dissertar sobre o porque não se deve administrar a 
segurança 
 dessa forma. Se um grupo de usuários tiver sempre direito a SELECT 
em 
 uma base, porque não utilizar o fictício:
 
 GRANT SELECT ON [schema] to [role]
 
 Acho que isso tá mais para uma limitação do Oracle (facilmente 
 contornável, eu sei, mas ainda assim uma limitação).
 
 2) Como eu não tenho acesso ao Metalink, vc poderia falar mais 
sobre 
 esse artigo How to Automate Grant
 Operations When New Objects Are Created in a SCHEMA/DATABASE ?
 
 Um abraço,
 Josir.
 -
 Não, não tem GRANTs a nível de schema, não é assim que se deve
 administrar segurança num bd Oracle.
 Porém, apenas para complementar, o que ele em tese ** PODE ** sim
 fazer pra obter um automatismo do tipo, se for o caso, poderia ser:
 
 a) ter uma TRIGGER que após o DDL de criação do objeto faz o GRANT
 (como triggers de DDL tem restrições à SQL dinâmico, usar uma tabela
 de jobs cfrme mostrado na nota 210693.1 How to Automate Grant
 Operations When New Objects Are Created in a SCHEMA/DATABASE do
 Suporte Oracle/metalink