LINQ e Permissões de Banco de dados
-
09-06-2019 - |
Pergunta
Eu ainda estou tentando colocar minha cabeça em torno do LINQ e acessar um Banco de dados SQL.
Eu sempre fui ensinada que você só deve ter permissões de execução de procedimentos armazenados para seus dados.
Você nunca deve ter select / insert / update / delete.
(Isso é porque de desempenho e de segurança)
Para obter dados de LINQ, obviamente, você precisa de permissões.Eu sei que você pode usar procedimentos armazenados com o LINQ, mas desde que eu não posso fazer associações qual é o ponto?
Eu perdi alguma coisa???
Solução
1) Nós somos programadores, não DBA fascistas.Se o seu estado de requisitos que o banco de dados deve ser bloqueada 100%, Linq não é para você.Eu não sou um DBA, então eu acredito que a maior parte da performance/segurança hype é só isso.O Linq é para mim.
2) Você pode fazer associações com o linq.
@Filipe:Linq transforma automaticamente avaliações em parâmetros de consulta, de modo que ele fornece algumas injeção de sql proteção.No entanto, você ainda tem que avaliar de perto suas necessidades, para determinar o quanto a segurança que você precisa e em que níveis.Linq faz lidar com o banco de dados muito mais fácil, mas torna-se mais fácil colocar problemas de segurança de design na parte de trás do queimador, que é uma coisa ruim.
Outras dicas
Bem, por motivos de segurança, você não deve entrada de qualquer usuário inserir dados em consultas.Se você ficar com esta regra, não estou a ver o problema de ter permissão de select.
Se todo o acesso ao banco de dados está "atrás" procedimentos armazenados depende das necessidades da aplicação e a empresa.Eu tenho implementado sistemas que utilizam pontos de vista para obter todos os dados e procedimentos armazenados para todas as atualizações.Isso permite a segurança centralizada e lógica de banco de dados, enquanto ainda permitindo o front-end developers usar consultas SQL, onde apropriado.
Como tantas outras coisas na programação - isso depende das necessidades do seu projeto.
LinqToSql dá suporte a procedimentos armazenados.Scott Gu tem um post sobre ela:
Eu estou muito de acordo com Jeff Atwood sobre os "Procedimentos Armazenados vs.Inline SQL/LINQ" problema: Quem Precisa De Procedimentos Armazenados, De Qualquer Maneira?.
Estou confuso por que você mesmo deseja realizar uma ASSOCIAÇÃO, se você está no SPROCs-para-tudo multidão;não deveria envolver em que INGRESSAR em outro SPROC?
Como disse, LINQ não foi projetado para o tipo de banco de dados use o que você está falando;ele foi projetado para dar-nos estaticamente tipadas inline SQL.Você pode, no entanto, ainda controlar o acesso através de permissões de usuário se você usar o LINQ para SQL.