【问题标题】:Connecting to SQL database directly or through a client-server service直接或通过客户端-服务器服务连接到 SQL 数据库
【发布时间】:2013-04-15 00:12:40
【问题描述】:

您好,我目前正在使用 c# xna 创建游戏,并将允许用户拥有某种配置文件系统。这样他们就可以创建帐户、登录查看个人资料、成就等。

当我测试这个时,我使用的是 SQL Server Express 的本地实例。在测试中这很好,但是在创建成品时可以简单地更改连接字符串以连接到远程可公开访问的 SQL 服务器,否则会产生安全隐患。

例如,是否有人能够通过程序找出 SQL 服务器的用户名/密码,然后手动连接并造成严重破坏?

我应该改为连接到代表我的客户端程序查询数据库的服务器端应用程序,以防止客户端直接访问我的数据库,还是这是不必要的抽象?

【问题讨论】:

    标签: sql security client-server


    【解决方案1】:

    出于安全考虑,最好连接到服务器端应用程序,而不是让程序直接连接到数据库。

    首先,将 SQL Server 公开在公共 Internet 上通常被认为安全性较差,因为它存在许多远程漏洞。

    其次,一般来说,限制每个用户的数据库访问是困难的或不可行的。创建单个数据库帐户通常不切实际,因此所有用户都使用单个帐户连接到数据库。这个单一帐户需要大量访问数据库才能执行必要的功能,这意味着它也可用于对数据库执行任意恶意查询。一种温和的可能性是UPDATE highscores SET score = 1000000000 WHERE user_id = <my user id>。我见过一些学校管理系统通过对所有用户使用默认的数据库管理员用户名和密码来实现,这些用户名和密码是通过网络以明文形式发送的。这些不是面向公众的,这使它稍微好一点。

    与此相关的一些其他问题是:

    【讨论】:

      【解决方案2】:

      How to enable SSL encryption for an instance of SQL Server by using Microsoft Management Console

      连接字符串(sql server 2012):

      Provider=SQLNCLI11;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
      Encrypt=yes;
      

      连接字符串(sql server 2008):

      Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
      Encrypt=yes;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-08
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        相关资源
        最近更新 更多