Безопасность в LINQ to SQL
При соединении с базой данных всегда присутствуют риски безопасности. Хотя в LINQ to SQL включены некоторые новые способы работы с данными в SQL Server, он не предоставляет никаких дополнительных механизмов безопасности.
Управление доступом и проверка подлинности
У LINQ to SQL нет своей модели пользователей или механизмов проверки подлинности. Применяйте SQL Server Security для управления доступом к сопоставленным с вашей моделью объектов базе данных, ее таблицам и представлениям, а также хранимым процедурам. Предоставляйте пользователям минимальный требуемый доступ и настаивайте на использовании для проверки подлинности надежных паролей.
Сопоставление и сведения о схеме
Сопоставление типа SQL-CLR и сведения о схеме базы данных в модели объектов, а также внешний файл сопоставления доступны всем, у кого есть доступ к этим файлам в файловой системе. Предполагается, что информация о схеме будет доступна всем, кто может получить доступ к модели объектов или внешнему файлу сопоставления. Для предотвращения распространения доступа к сведениям о схеме пользуйтесь механизмами безопасности файлов, чтобы защитить исходные файлы и файлы сопоставления.
Строки соединения
При любой возможности стремитесь избегать использования паролей в строках соединения. Строка соединения не только сама по себе представляет риск, но при использовании объектно-реляционного конструктора и средства командной строки SQLMetal она может попасть в раскрытом виде в модель объектов или внешний файл сопоставления. Любой обладатель доступа к модели объектов или внешнему файлу сопоставления через файловую систему сможет увидеть пароль соединения, если он будет включен в строку соединения.
Для минимизации подобных рисков применяйте встроенную безопасность для установления доверительного соединения с SQL Server. При таком подходе не требуется хранить пароль в строке соединения. Дополнительные сведения см. в разделе Безопасность SQL Server (ADO.NET).
При отсутствии встроенной безопасности в строке соединения потребуется открытый текст пароля. Ниже приведены лучшие способы обеспечения безопасности строки соединения в порядке возрастания риска.
Используйте встроенную безопасность.
Обезопасить строки соединения с помощью паролей и минимизировать пересылку строк соединения.
Применяйте класс System.Data.SqlClient.SqlConnection вместо строки соединения, поскольку он ограничивает длительность просмотра. В LINQ to SQL создать экземпляр класса System.Data.Linq.DataContext можно с помощью атрибута SqlConnection.
Минимизировать время существования и точек соприкосновения для всех строк соединения.
См. также
Основные понятия
Часто задаваемые вопросы (LINQ to SQL)