【问题标题】:moving from local database to remote. What do I need?从本地数据库移动到远程。我需要什么?
【发布时间】:2022-08-08 08:14:18
【问题描述】:

我有一些桌面经验,但我是(全新的)网络编程新手。我已经构建了一个广受欢迎的 C# WPF 桌面应用程序,它将数据存储在本地(在用户桌面上)SqlLite DB 中。我希望将应用程序转换为远程数据存储,可能使用 MS SQL Server DB,由 Web 主机服务提供商托管。那里的一个数据库将保存所有不同的用户数据,访问由他们自己的用户名/密码控制。

事实上,我已经将其作为一个实验进行了,并且它起作用了。我担心的是安全性:目前我的代码内连接字符串只使用我的数据库帐户/密码。我不是一个新手,知道这不是一个好主意。必须有一种标准的方法将私有信息从代码中移出并进入应用程序代码和数据库之间的某种中继。但我不知道术语,或要求什么,尽管谷歌搜索了一天。所以:

(1) 用户请求数据保存,比如说

(2) App 发送 SQL 语句和用户凭证进行中继。

(3) Relay 根据数据库记录检查凭据(使用我的数据库凭据,但没关系,它们至少不存储在应用程序的源代码中)

(4) 假设ok,将sql语句转发到db。

(类似)这是一件事吗?它叫什么?或者是否有其他标准方法可以实现将连接字符串完全排除在代码之外的目标?我从哪里开始阅读有关如何实施它的信息?我怎么知道我的网络主机是否支持这样的事情?

    标签: c# database web-config connection-string configuration-files


    【解决方案1】:

    从 Web 应用程序操作的角度来看,从 dotnet 应用程序到 RDBMS 服务器的连接字符串被视为秘密.这意味着它是您从配置文件中检索的数据,并且永远不会签入到您的 git 或其他源代码控制系统中。该连接字符串包含您的 RDBMS 用户名和密码,以及数据库名称和运行它的服务器等内容。

    (如果您确实为除localhost 之外的任何计算机的源代码控制签入了 RDBMS 连接字符串,请更改该密码。现在就做。Cyber​​creeps 巨魔 github 寻找连接字符串以窃取并用于邪恶目的。)

    Dotnet Web 应用程序有一个配置文件。这是一个名为web.config 的XML 文件。连接字符串在 XML 节中转到 into that file,如下所示

      <configuration>  
        <connectionStrings>
          <add name="Name"
           providerName="System.Data.ProviderName" 
           <!-- When deploying to production,
                replace this connection string with one
                to connect the production data base. -->
           connectionString="Valid Connection String;" />  
        </connectionStrings>  
      </configuration>
    

    这里有一些 info 关于从您的 dotnet 程序中检索这种连接字符串的内容。

    我很幸运在该文件中放置了一个全局无用的本地有用的localhost 连接字符串,一些 xml cmets 解释说在将 Web 应用程序放在公共服务器上时需要对其进行编辑。我的例子展示了这样的 cmets。

    也可以使用 Web 服务器的 IIS 管理器应用程序编辑连接字符串。此设置——无论是 web.config 还是 IIS 管理器——都具有良好的安全性。

    您概述的方案比您需要的更复杂,除非,天堂禁止,您的每个客户都有不同的连接字符串。

    【讨论】:

    • 好的,但我仍然很模糊:如果我理解正确,我的桌面应用程序应该将连接字符串存储在 web.config (app.config?) 中,这可能是在用户安装应用程序时通过某种方法填充的。在哪里方法查找连接字符串?使用什么凭据?(那些凭据不能在代码中...)显然仍然在海上,感谢您的帮助...
    • 简单,如果有点粗糙。部署时手动编辑 web.config 文件或使用 IIS 管理器设置连接字符串。从您的密码管理器或其他一些安全存储中获取连接字符串。您不会忘记这一步:如果没有正确的连接字符串,部署的应用程序将无法运行。 Dotnet 有secrets management,但我不是解释如何在 CI/CD 中使用这些功能的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多