none
Consultas SQL seguras RRS feed

  • Pergunta

  • Olá a todos,

     

    A tempos que venho lendo sobre SQL injection, ORM's, sp's e blablabla

    mas o que me ocorre é que trabalho muito com telas com diferentes campos de filtro, onde geralmente nem todos são utilizados. estou trabalhando com asp.net e SQL Server

    e gostaria de saber se alguem tem uma solução que permita o filtro opcional de campos do sql baseados nos campos fornecidos sem matar a performance da consulta, já vi umas por ai que consultam todos os campos e fazem um "or null = null" para que os campos não fornecidos retornem sempre true.

    atraves de sql dinamico eu consigo alcançar meu resultado, mas existe algum metodo mais seguro? eu já cheguei a escrever uma sp que escreve sql dinamico, mas seria de fato essa a solução mais indicada?

     

    Tenho evitado LinqToSql ou LinqToEntities por questões de performance


    Ariel Nessi
    • Movido Olavo Oliveira Neto segunda-feira, 31 de outubro de 2011 13:16 Amigo, estou movendo sua thread para um fórum especifico de ADO.NET (De:.NET Development - Geral)
    quarta-feira, 26 de outubro de 2011 16:27

Todas as Respostas

  • se bem entendi... eu costumo fazer assim nas procedures:

     

    select * from tabela

    where (@param1 = null or param1 = @param1) -- faço isso para todos os campos de filtro, e valido a consistencia ou filtro

    and (@param2 = null or param2 = @param2)


    Se a minha resposta lhe foi util, marque "Propor como Proposta" para qualificar o conteudo do fórum. Obrigado, Vinicius Nunes Macedo
    quarta-feira, 26 de outubro de 2011 18:43
  • Vinicius,

    antes de nada obrigado pela reposta,

    Tenho algumas sp's escritas aqui no mesmo estilo Vinicius, contudo, apesar de não ter feito testes para isso, tenho receio de que formular as queries assim possa confundir o plano de ação da query. Sabe informar se isso procede?

     

    Só para esclarecer a questão, digamos que eu tenha uma tabela com 15 campos, a stored procedure irá receber 1 parametro e colocar os outros 14 com default null, isso não causaria meu SQL a conferir todos os 15 campos para filtrar  de fato apenas por 1 ? se for o caso não é aceitavel para minha demanda 


    Ariel Nessi
    quarta-feira, 26 de outubro de 2011 20:09