如何在internet上安全地使用Entity Framework/C#和SQL Server
我目前正在开发一个C#/WPF/MVVM/EF6应用程序,它允许位于不同物理位置的多个用户使用第三方API向手机发送和接收短信 数据库存储所有发送和接收的消息,并由用户直接更新(发送消息)或由ASP.NET web挂钩更新(接收消息)。用户正在使用SQL身份验证和动态创建的连接字符串连接到数据库(即,每当创建新的DbContext时传入连接字符串)。EF用于查询和显示数据 我现在遇到了我认为可能是我的设计的一个基本安全问题。用户都需要直接访问SQL数据库才能使用实体框架方法。经过一些研究,简单地将SQL Server暴露在internet上似乎是非常危险的。大多数建议是使用VPN或IP白名单,但不幸的是,这两种都不是选项。我们将由不提供VPN的第三方托管SQL Server,用户将经常处于不同的位置,因此他们的IP不会是静态的如何在internet上安全地使用Entity Framework/C#和SQL Server,c#,sql-server,wpf,entity-framework,C#,Sql Server,Wpf,Entity Framework,我目前正在开发一个C#/WPF/MVVM/EF6应用程序,它允许位于不同物理位置的多个用户使用第三方API向手机发送和接收短信 数据库存储所有发送和接收的消息,并由用户直接更新(发送消息)或由ASP.NET web挂钩更新(接收消息)。用户正在使用SQL身份验证和动态创建的连接字符串连接到数据库(即,每当创建新的DbContext时传入连接字符串)。EF用于查询和显示数据 我现在遇到了我认为可能是我的设计的一个基本安全问题。用户都需要直接访问SQL数据库才能使用实体框架方法。经过一些研究,简单地
是否有其他选项可用于维护SQL Server直接访问和其他安全性?我能想到的唯一选择是通过为应用程序创建一个API来查询和重构代码,从而使用API而不是实体框架来提取数据,从而完全改变体系结构。如有任何意见,将不胜感激 您可以创建一个直接访问数据库的API,该API将通过internet公开,并且您将只定义要在数据库上执行的方法(例如CRUD操作) wpf应用程序将不再直接与数据库通信,而是与api通信。api是保存连接字符串的api,并且是唯一可以直接访问数据库的api。这样,您就不会通过internet公开整个数据库 您还可以添加身份验证,这样只有登录的用户才能从数据库获取/插入/修改数据,还可以添加授权,以处理用户权限 现在,您应该重构应用程序以使用API。尽管如果您使用类似于存储库模式的东西,它只需要对存储库本身进行一些更改即可正常工作 现在,您的应用程序设计有了另一个抽象层,即API WPF应用程序→ API→ 数据库
我在应用程序中使用API的方式是使用
HttpWebRequest
类。但是,还有其他方法可以处理这个问题,本文对此做了很好的解释:您可以创建一个直接访问数据库的API,该API将通过internet公开,并且您将只定义要在数据库上执行的方法(例如CRUD操作)
wpf应用程序将不再直接与数据库通信,而是与api通信。api是保存连接字符串的api,并且是唯一可以直接访问数据库的api。这样,您就不会通过internet公开整个数据库
您还可以添加身份验证,这样只有登录的用户才能从数据库获取/插入/修改数据,还可以添加授权,以处理用户权限
现在,您应该重构应用程序以使用API。尽管如果您使用类似于存储库模式的东西,它只需要对存储库本身进行一些更改即可正常工作
现在,您的应用程序设计有了另一个抽象层,即API
WPF应用程序→ API→ 数据库
我在应用程序中使用API的方式是使用
HttpWebRequest
类。不过,还有其他方法可以处理这个问题,本文对此做了很好的解释:我同意您创建API并充当数据库适配器,原因有二
注意:因为您允许客户端使用数据库。确保客户端始终是最新版本。我认为当客户端请求连接字符串时,您可以进行检查。我同意您创建API并像数据库适配器一样工作,原因有二