Вопрос

Я все еще пытаюсь разобраться в LINQ и получить доступ к базе данных SQL.

Меня всегда учили, что у вас должны быть разрешения на выполнение хранимых процедур только для ваших данных.

У вас никогда не должно быть выбора / вставки / обновления / удаления.

(Это связано с производительностью и безопасностью)

Чтобы получить данные из LINQ, вам, очевидно, нужны разрешения select.Я знаю, что вы можете использовать хранимые процедуры с LINQ, но поскольку я не могу выполнять объединения, какой в этом смысл?

Я что-то пропустил???

Это было полезно?

Решение

1) Мы программисты, а не фашисты из DBA.Если в ваших требованиях указано, что база данных должна быть заблокирована на 100%, Linq не для вас.Я не администратор базы данных, поэтому считаю, что большая часть шумихи вокруг производительности и безопасности связана именно с этим.Linq - это для меня.

2) Вы можете выполнять объединения с помощью linq.

@Филипп:Linq автоматически преобразует оценки в параметры запроса, поэтому обеспечивает некоторую защиту от внедрения sql-кода.Однако вам все равно придется внимательно оценить свои требования, чтобы определить, какой уровень безопасности вам нужен и на каких уровнях.Linq значительно упрощает работу с базой данных, но при этом упрощает отодвигание безопасного проектирования на второй план, что плохо.

Другие советы

Что ж, по соображениям безопасности вы не должны вводить какие-либо введенные пользователем данные в запросы.Если вы будете придерживаться этого правила, я не вижу проблемы с разрешением select.

Осуществляется ли весь ваш доступ к базе данных "за" хранимыми процедурами, зависит от потребностей приложения и компании.Я внедрил системы, которые используют представления для получения всех данных и хранимых процедур для всех обновлений.Это обеспечивает централизованную безопасность и логику базы данных, в то же время позволяя интерфейсным разработчикам использовать SQL-запросы там, где это уместно.

Как и многое другое в программировании - это зависит от потребностей вашего проекта.

LinqToSql действительно поддерживает хранимые процедуры.У Скотта Гу есть сообщение об этом:

http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx

Я полностью согласен с Джеффом Этвудом по поводу "Хранимых процедур противПроблема со встроенным SQL / LINQ": Кому вообще нужны Хранимые процедуры?.

Я в замешательстве относительно того, зачем вам вообще понадобилось выполнять JOIN, если вы принадлежите к группе SPROCs-for-everything;не следует ли вам завернуть это СОЕДИНЕНИЕ в другой SPROC?

Как сказал Уилл, LINQ не был разработан для использования в БД того типа, о котором вы говорите;он был разработан для того, чтобы предоставить нам статически типизированный встроенный SQL.Однако вы все равно можете контролировать доступ с помощью пользовательских разрешений, если используете LINQ to SQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top