最佳实践:将WPF连接到远程SQL数据库

时间:2017-02-07 12:56:18

标签: c# mysql wpf wcf server

我知道有很多关于这个话题的问题,但是经过四天的阅读和谷歌搜索,我有点困惑,需要有人为我澄清一些事情。

我的情况:

我在C#中开发了一个WPF应用程序。 此应用程序需要连接到数据库,因为它存储useraccount数据和其他数据。到目前为止,我通过设置数据源并使用Fluent NHibernate进行映射和会话,在Visual Studio环境中使用了本地数据库。 现在我想通过ClickOnce将应用程序分发给用户,所以我需要从本地数据库切换到在线数据库。

我有一个Web服务器(Debian 8 Jessie 64Bit,内核版本3.16.0-4-amd64(SMP)),SSH访问和访问i-MSCP 1.3.16平台以管理服务器。我在服务器的一个域和一个sql用户中创建了一个数据库,我可以访问phpmyadmin。 我已经按照步骤授予任何IP远程访问权限,例如SANDHYALAL KUMAR所述的here第一个问题:如何检查现在是否已成功授予远程访问权限。因为在执行mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;时,我会通过Putty控制台获得0 rows affected.吗?

第二个也是更重要的问题:如何将我的WPF现在与我的服务器连接。 我已经读过,我不应该直接连接到服务器,因为密码安全性和数据库安全性,如下所示:

            ISessionFactory sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2012
              .ConnectionString(c => c
                  .Server("SSS")
                  .Database("DDD")
                  .Username("UUU")
                  .Password("PPP")
                  ).ShowSql()
            )
            .Mappings(m =>
                      m.FluentMappings
                          .AddFromAssemblyOf<User>())
            .ExposeConfiguration(cfg => new SchemaExport(cfg)
             .Create(false, false))
            .BuildSessionFactory();
        return sessionFactory.OpenSession();

但是,我不认为上面的解决方案对我有用,因为我没有在线MSSQL Server,对吧?或者我是否需要配置现有服务器?

是否有特定的图层或API可以解决我的问题。是WCF还是REST或ADO.Net对我来说是一个解决方案?我真的很喜欢这些不同的名字,所以我真的很感谢你对我的两个问题的一些解释和建议。

1 个答案:

答案 0 :(得分:1)

您的情况与我的情况几乎相同。 我的应用程序也是WPF(clickonce)并连接到Microsoft Azure Cloud SQL Server。 我也曾经挣扎了好几天,因为你知道,安全始终是最重要的。

在桌面应用程序中设置密码和分发意味着为黑客提供密码。与您评论的一样,使用WCF设置图层并使WCF保持非对称(如RSA)编码的密码。然后,服务器将仅使用非对称密钥对用户进行身份验证以进行解密。此私钥仅存在于服务器中。

回答第一个问题)您可以编写SELECT查询以确认哪些登录,用户具有这些角色,是否启用访问权限。 我确信有用的例子可以在互联网上找到。

希望这有助于您理解......