Database 对于2层应用程序,在客户端公开数据库连接字符串有哪些安全问题

Database 对于2层应用程序,在客户端公开数据库连接字符串有哪些安全问题,database,security,connection-string,3-tier,2-tier,Database,Security,Connection String,3 Tier,2 Tier,最近我正在做一项关于创建多层应用程序的调查。我读过的每一个主题都表明,3层体系结构比2层体系结构更好,因为通过在客户端公开数据库的连接字符串,您在系统上创建了一个很大的安全漏洞。所有这些文章都只是解释了公开数据库的位置是个坏主意,没有一篇文章解释了原因 有人能帮我解释一下公开数据库位置的线索吗?我的意思是,他们将知道位置,但他们不知道用户名和密码,以便登录和修改数据库。是什么使三层体系结构比两层体系结构更安全?这仅仅是访问数据库的额外希望吗 提前感谢,, Constantin Patak连接字符

最近我正在做一项关于创建多层应用程序的调查。我读过的每一个主题都表明,3层体系结构比2层体系结构更好,因为通过在客户端公开数据库的连接字符串,您在系统上创建了一个很大的安全漏洞。所有这些文章都只是解释了公开数据库的位置是个坏主意,没有一篇文章解释了原因

有人能帮我解释一下公开数据库位置的线索吗?我的意思是,他们将知道位置,但他们不知道用户名和密码,以便登录和修改数据库。是什么使三层体系结构比两层体系结构更安全?这仅仅是访问数据库的额外希望吗

提前感谢,,
Constantin Patak

连接字符串包括用户名和密码。如果客户机应用程序可以直接访问数据库,那么用户可以检查客户机应用程序并提取连接凭据以执行相同的操作


中间层将提供与您希望客户端能够执行的操作相对应的API。客户机不受内部实现的影响,内部实现可能包括数据库,也可能不包括数据库。您将能够在不影响客户端的情况下更改实现。也许您会发现负载太高,需要从RDS切换到NoSQL。客户不需要知道或改变。也许您将开始缓存一些结果,而不会访问数据库。同样,客户不需要知道或更改。这就是为什么业界对不直接从客户端应用程序访问数据库进行标准化。

嗨,Jeremy。谢谢你的回复。是否有一种方法可以在运行时构造连接字符串以不公开用户名和密码,并与服务器建立安全连接以发送它们?对于所提供的API,您可以在SQL中添加用户,并且仅对您拥有的用户授予部分权限。我可以理解应用程序抽象DAL层的必要性,但我阅读的主题明确指出,客户端的连接字符串是一种安全暴露。很抱歉坚持这么久,但我相信我遗漏了一些东西。当然,您可以在运行时设置密码,但是您的应用程序将如何获取密码?如果你的应用程序可以检索它,那么用户也可以。数据库权限可以提供一些安全性,但它们通常不够细粒度,不允许客户端应用程序执行其操作,但不允许任何其他操作。例如,如果您想只修改它创建的行。您可以使用存储过程来实现这一点,但此时您正在用一种不太方便的语言编写应用程序层。