客户端应用程序,直接连接数据库操作很危险吗?

皮特胖胖 2018-03-02 02:32:54
前几天面试,被问到我之前做的一个项目,问我客户端与服务器如何数据交互的,我说直接连接数据库的,然后被告知这样的情况应该写一个后台服务来与客户端进行TCP通讯,后台服务充当中间角色操作数据库。

请问
1、直接操作数据库的方式有什么弊端?
2、这个“后台服务”,正常应该怎么实现,有没有现成的开源项目参考?
...全文
2939 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon51 2018-03-03
  • 打赏
  • 举报
回复
跟着大神们总能接触到很多新东西,我是一窍不通。
引用
2、这个“后台服务”,正常应该怎么实现,有没有现成的开源项目参考?
参考下这个书《31天学会CRM项目开发》,这个里面就是不直接连接数据库,是通过Web服务程序。
  • 打赏
  • 举报
回复
面试官没有那么多时间给你解释,他心目中有他们需要的技术的底线、甚至哪怕并不急迫但是需要储备的技术人才。 人家就是要全栈开发能力,至少是有哪怕是 web 服务的开发经验的人,起码在做项目时能顶点事儿。如果只是会做一个“窗口”程序,那就不招聘了。
  • 打赏
  • 举报
回复
比如说我们开发一个网络系统,然后用户自己的服务器买没有买来,于是公司就要在自己的办公室里的一个对外服务器上部署这个程序,然后让用户的将近100个操作人员从几十公里、几百公里以外来访问。然后等用户自己的服务器到位了,它们其实也不是只在一个大房间局域网里用的,也要远程使用,甚至移动APP访问。 分析各种知识点,要看你最后主要的点是否已经搞清楚了。假设你仅仅纠结于“和危险吗?”这一个点,那么你可能给这一个点所配套的权重会发生严重偏差。
xuzuning 2018-03-02
  • 打赏
  • 举报
回复
直接连接数据库操作很危险吗? 显然你是从安全角度出发的,其实这种操作都是在局域网内的,一般不需要考虑安全问题 真正要考虑的是运行成本,当然你要用盗版的,就当我什么也没说
  • 打赏
  • 举报
回复
比如说我们的手机收发语音数据包、收发短信,那并不是什么把语音数据包增删改查到数据库里。再比如说计费,那是后台服务异步进行的任务。比如说任何一种业务处理,比如说两个窗口上的随便点击按钮来模拟对战游戏.......随便一个现代的网络软件设计对于专业的网络软件设计师的要求,都是要开发即时通讯、即时访问业务服务器功能的系统。 而那种只会在局域网里在窗体调用关系数据库的编程程序员,那么所学过的技术肯定很少,可能所有互联网时代需要的通讯技术都没有学过。这是面试时考虑的。
  • 打赏
  • 举报
回复
开发设计一个大一点的运营的网络系统,首先就是对外发布业务服务接口。然后再开发一个或者多个客户端产品,不同的客户端产品可以基于同一套服务协议而分别开发。 传统的局域网内做一个 OA 桌面小程序,会使用在调用数据库的驱动来直接连接。但这不是大型、城域网和公网上的 c/s 架构应用系统。不仅仅考虑所有桌面客户端去发布的程序都用同一个账号密码登录数据库有没有“危险”,更多地是那些设计师天生就从互联网的思维方式来设计架构,所以为了运营一个成功的互联网服务而准备。
  • 打赏
  • 举报
回复
比如说你访问微信、支付宝,或者随便一个在公网上正常运营的互联网公司的系统,你的 APP 或者网页是用同一个账号密码打开人家一个数据库吗? 后台有几个数据库、分别是什么类型的数据库、有几万台服务器、有几十套SOA服务系统分别支持前端访问,这个对前端都是屏蔽的。前端只要访问一个接入服务器即可,根本不接触后台架构。 这是网络软件的三层架构。
秋的红果实 2018-03-02
  • 打赏
  • 举报
回复
引用 3 楼 From_TaiWan 的回复:
提问者教条主义,人云亦云,中国式的过马路 你就写个winForm程序,登陆数据库的用户名、密码、ip、端口等都硬编码写死(换数据库,你的升级软件) 发送所有信息前都加密,数据库保存密文,用的时候回来再解密(网上截获了你的信息也没用) 何况数据库本来有完善的加密系统,你干脆不用二次加密,只用程序加密就可以了 软件本身用C++加个壳,再用硬件加密狗加壳 你叫他先破了再说
我说的提问者,指面试官
秋的红果实 2018-03-02
  • 打赏
  • 举报
回复
当然没有破不了东西,要看成本了,10w以下的东西,我看够用了 普遍的做法,是加了服务层。这方面,你只研究wcf就行了,这个是以往同类技术的一个升级
听雨停了 2018-03-02
  • 打赏
  • 举报
回复
简单来说就是把数据库连接这一步骤写成一个接口,客户端访问接口,不直接和数据库发生交互。这样就是安全一点。
秋的红果实 2018-03-02
  • 打赏
  • 举报
回复
提问者教条主义,人云亦云,中国式的过马路 你就写个winForm程序,登陆数据库的用户名、密码、ip、端口等都硬编码写死(换数据库,你的升级软件) 发送所有信息前都加密,数据库保存密文,用的时候回来再解密(网上截获了你的信息也没用) 何况数据库本来有完善的加密系统,你干脆不用二次加密,只用程序加密就可以了 软件本身用C++加个壳,再用硬件加密狗加壳 你叫他先破了再说
正怒月神 2018-03-02
  • 打赏
  • 举报
回复
1应该访问接口,而不是直接操作数据库。不然配置文件一查可能就知道了。 虽然你可以加密。 2 后台服务,在你说的这里就是接口,例如webapi,webservice等等
  • 打赏
  • 举报
回复
容易暴露数据库账户密码啊,有了你家的钥匙,我随时都能开你家的门 “后台服务”有很多种方式,最简单的你可以写个ashx的处理程序请求参数,让它去执行数据库操作,返回成功失败给客户端进行显示就可以了 还有net Remoting,Web Service,wcf,webapi等等

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧