【发布时间】:2017-06-24 17:37:26
【问题描述】:
我知道关于这个主题有很多问题,但是经过四天的阅读和谷歌搜索后,我有点卡住了,需要有人为我澄清一些事情。
我的情况:
我用 C# 开发了一个 WPF 应用程序。 此应用程序需要连接到数据库,因为它存储用户帐户数据和其他数据。到目前为止,我通过设置数据源并使用 Fluent NHibernate 进行映射和会话,在 Visual Studio 环境中使用本地数据库。 现在我想通过 ClickOnce 将应用程序分发给用户,所以我需要从本地数据库切换到在线数据库。
我有一个 Web 服务器(Debian 8 Jessie 64 位,内核版本 3.16.0-4-amd64 (SMP)),通过 SSH 访问和访问 i-MSCP 1.3.16 平台来管理服务器。我在服务器的一个域和一个 sql-user 中创建了一个数据库,我可以访问 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 对我来说是一个解决方案吗?我真的被所有这些不同的名字所困扰,所以我真的很感谢你对我的两个问题的一些解释和建议。
【问题讨论】:
-
明确一点...您要分发 WPF 桌面应用程序...连接到在线数据库...同时保护连接字符串?
-
是的,这不常见吗?我的意思是每个应用程序都以某种方式连接到数据库,不是吗?关于安全性,我认为 WPF 和数据库之间的层可以解决问题。
-
确实,如果这是您的场景,您需要公开一个 API(最简单的是使用 WebApi 项目),您的客户端将连接到该 API。 API 将安全地与数据库通信。所以:客户端 --> API --> DB
-
感谢您的澄清,您能推荐一个特定的 webAPI 或框架来设置这样的 api 吗?