Jump to content

Archived

This topic is now archived and is closed to further replies.

ScornInPC

Algumas Questões Interessantes

Recommended Posts

Pessoal, estou com 2 coisas na cabeça, que eu sei que da pra fazer com MSSQL, pois o SAP B1 faz. Estou desenvolvendo um sistema, e queria garantir a integridade dos dados, impossibilitando o usuário executar queries de estrutura ou dados direto no banco. Gostaria também de desenvolver bloqueios personalizados direto no banco. Por exemplo, o usuario cadastra um cliente com o código C0001, dai eu faço uma transaction para validar este código.

 

1° pergunta:

É possivel identificar em algum lugar no MySQL as queries executadas e qual programa executou estas queries? Assim consigo fazer um log de quem executou queries que não sejam de consulta, e sei se o usuário perdeu a garantia ou não do sistema.

 

2° - É possivel, antes de dar um insert por exemplo, executar uma query, que retorne valide algu campo? Por exemplo, eu dou um insert. O MySQL vai em algum lugar e executa uma outra querie pré definida. Se retornar TRUE executa o insert, se retornar FALSE, não executa o insert e retorna uma mensagem definida na minha query trigger.

 

É possivel fazer isso? se não entenderem direito, me digam ok? tento explicar melhor =)

 

Valeu pessoal.

Share this post


Link to post
Share on other sites

impossibilitando o usuário executar queries de estrutura ou dados direto no banco

crie uma conta limitada com permissões somente para insert, upade, delete e select

 

 

O usuário possui acesso ao servidor mysql ? (ao sistema operacional)

(se possuir acesso ao SO, ficaria complicado criar segurança)

 

 

o que eu faria é manter o server lacrado, onde o usuário nçao teria acesso nem mesmo ao hardware.

todo o sistema ficaria no servidor e o cliente acessaria somente via browser (aplicativo web, PHP, ASP, JSP, etc..)

 

para aplicativos tipo VB, DElphi, C++, JAVA, codifique os dados de conexão e outros dados sensíveis

Share this post


Link to post
Share on other sites

Opa Hinom.

 

Bem, a possibilidade de lacrar o server é descartada =/

Realmente eu gostaria de fazer isso, por inumeros motivos, mas não é possivel =/

 

Eu cheguei a pensar em na instalação eu crio um usuário, e utilizo este usuário com meu software. Para ver a integridade, eu verifico todas as queries executadas, sem ser pelo meu aplicativo, e sei sei existe inserts. Porem meu aplicativo possui criação dinamica de relatorios, dai eu teria que ficar tratando as queries que os usuários digitassem tb. Vou verificar melhor como a SAP faz isso, pois não é possivel que eu não consiga colocar um identificador ou algo do tipo nas minhas queries para saber de onde ta sendo executado =)

 

Bem, no aguardo de alguma idéia =)

Share this post


Link to post
Share on other sites

show full processlist;

 

te da o nome da maquina , o usuario , a quanto tempo a query tah rodando e o status dela e algumas outras coisas

Share this post


Link to post
Share on other sites

Giesta, estes processos ficam armazenados em algum lugar e tem como recuperar isso? é justamente isso que eu quero, mas não só no momento, quero alguma coisa do tipo mas não só do momento

Share this post


Link to post
Share on other sites

Nao ficam nao, mas você pode inventar algum bacalhau maluco para armazenar, mas sinceramente acho q você deveria abordar este seu problema com procedures.

Share this post


Link to post
Share on other sites

Então, não quero fazer gambiarra, quero usar alguma coisa nativa do mysql pra isso. Bem, antes que alguem pergunte, quero fazer isso por que meu sistema tem 250 tabelas e possui coisas fiscais, então antes que alguem queria tentar apagar ou atualizar alguma coisa direto na base, perderá a garantia e eu não fique mais responsável pelo sistema. Essa é a politica adotada pela SAP, e eu achei bastante coerente.

 

Bem, ja procurei se existe procedures pre-definidas para algumas coisas, mas não achei nada do tipo. Giesta, como resolveria isso com procedures?

Share this post


Link to post
Share on other sites

Qual é o problema de trancar o banco deixando apenas um usuario usar o banco de dados, q eh o usuario do programa e entao jogar a senha fora?

Share this post


Link to post
Share on other sites

Pois apesar de querer garantir a integridade dos dados, o usuário pode executar queries de consulta, ou um outro programa ter que ler meu banco para uma integração, etc ... etc ...

Geralmente quem cria este usuário, que é o administrador do banco, não sou eu, é o departamento de TI do meu cliente. Então preciso saber disso. Estou com esse problema, pois sei que o usuário removeu o valor de um item de uma cotação, direto no banco, pois pelo sistema ele não conseguiu por tinha frete, um relacionamento. após ele fazer a remoção, começou a ocorrer alguns problemas referentes à esta cotação. o pedido saiu errado, a nota saiu errada e por ai vai. Se eu tivesse como saber se foi executado um delete sem ser pela minha aplicação, ja teria dado um check mate nisso.

 

Bem, é isso =)

Share this post


Link to post
Share on other sites

Faz dois usuarios entao

 

um q faz as 4 operacoes

e um q soh da select, dai o maximo q ele consegue eh travar o banco com produto cartesiano, mas nao corrompe os dados nem muda nada

 

alem disso se você trabalha pra um cliente q tem departamento de TI pode ter certeza q eles irao ao inferno e voltarao duas se for preciso para garantir q sua aplicacao nao vai funcionar.

Share this post


Link to post
Share on other sites

O departamento de TI que digo, é gente que formata computador e curioso.

No maximoele vai entrar, deletar, e ver no que da.

Não posso garantir 2 usuários diferentes, quem cuida da administração é a empresa, ele pode criar um usuario, da a permissão, delete, e apaga o usuario.

 

Não acredito que o mysql não tenha logs de execução.

Share this post


Link to post
Share on other sites

Tem log de execucao, mas nao dentro do banco.... e pra mim nao resolve, saber quem fez nao impede de fazer

 

de qualquer forma basta startar o servidor com -l

 

mysqld -l

Share this post


Link to post
Share on other sites

isso que o giesta comentou é verdade..

 

é bom colocar isso num contrato, pois essa sua situação é muito vulnerável

especifique num contrato que você não possui responsabilidades sobre falhas no sistema, uma vez que outros possuem acesso à estrutura do banco de dados

Share this post


Link to post
Share on other sites

Isso eu ja possuo no contrato, porem para um diretor, eu preciso dizer pra ele com evidencias concretas, de que quem causou o problema foi um funcionário dele, e não um problema do sistema. Se para o diretor a nota ta saindo errado, para ele é o sistema que está com problemas =/

 

To enrrolado xD

 

Como trabalho com SAP, amanha vou pegar algumas documentações para ver se acho alguma coisa sobre.

 

Pessoal e sobre minha outra duvida? é possivel?

 

2° - É possivel, antes de dar um insert por exemplo, executar uma query, que retorne valide algu campo? Por exemplo, eu dou um insert. O MySQL vai em algum lugar e executa uma outra querie pré definida. Se retornar TRUE executa o insert, se retornar FALSE, não executa o insert e retorna uma mensagem definida na minha query trigger.

Share this post


Link to post
Share on other sites

flood,desculpa. Atualizei a pagina

Share this post


Link to post
Share on other sites

2° - É possivel, antes de dar um insert por exemplo, executar uma query, que retorne valide algu campo? Por exemplo, eu dou um insert. O MySQL vai em algum lugar e executa uma outra querie pré definida. Se retornar TRUE executa o insert, se retornar FALSE, não executa o insert e retorna uma mensagem definida na minha query trigger.

 

 

Sim, via procedure

Share this post


Link to post
Share on other sites

Pow pelo menos aqui no trabalho nos trabalhamos com Log,

porem e uma tabela log que fica o id do cara que fez a operaçao, tipo da operaçao e valor da operaçao se tiver,data hora, e a quem afetou diretamente.

Esse Squema gera um controle bastante amplo, porem a tabela de LOG cresce que e uma beleza.

 

Acho que seria uam boa ideia ate porque os dados ficam mais arrumados caso aconteça alguma m***** com o sistema.

 

Se for um servidor LInux, acredito que tenha algum log do Mysql sim.

abraço

Share this post


Link to post
Share on other sites

hehehe ótimo isso Koga, foi realmente o que eu pensei, ja que o MSSQL tambem trabalha assim. Dai entraria minha 2° duvida, como disparar uma procedure em determinado momento =)

 

por exemplo, disparar uma procedure ao inserir um registro na tabela "BPRT" por exemplo.

Share this post


Link to post
Share on other sites

Como eu disse antes, usar -l ou --log (da no mesmo) nao adianta no seu caso pq o log eh gerado em arquivo e nao em tabela dentro do banco, entao nao da pra você fazer um proc em cima disso.

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.