2011-11-28 70 views
0

我正在开发一个小型应用程序,该应用程序将用作使用MySQL作为后端数据库的Web应用程序的查看器(排序仪表板)。该应用程序将只做SELECT,没有INSERT或UPDATE或任何改变数据的东西。我知道构建此应用程序的首选方法是创建一个可访问数据库的Web服务,然后让客户端应用程序调用Web服务。这样你可以真正保护你的MySQL数据库只允许本地主机访问。实际上如何不安全地直接从应用程序访问MySQL?

另一方面,拥有Web服务会提高应用程序所需的复杂性和资源。我不仅需要编写这个过程两次,我必须编写两套测试套件和集成测试,并且由于客户端是用.net c#编写的,而在php的后端,我必须开发某种交换格式并保留在整个开发过程中在两种语言和IDE之间切换。

我可能会写这个服务,但是我想知道的是那里的体验是什么?我疯狂地考虑直接从客户端访问MySQL,或者甲骨文的优秀工程师为保护他们的数据库做了不错的工作,至少对于只有读权限的用户来说。

+1

通常可以这样做。创建MySql用户并赋予它们对表的特定权限,并仅允许他们选择。让人们使用他们的MySql用户登录。我也不明白为什么不。 – sinni800

+0

数以百万计的PHP网页直接从视图中访问MySQL(=单个PHP脚本来完成创建HTML的全部内容) – CodeZombie

+0

如果您的应用中只有有限的读取查询类型,我会坚持使用只是因为它比较容易编写,比如5个查询以json/csv或其他方式返回数据,不需要外部php库,没有IDE等等。否则,我会远程连接,但如果我没有任何东西隐藏在数据库中(表格列未在应用程序中使用)。 – ashein

回答

1

如果使用直接访问MySQL数据库只是选择表的用户,您将需要一个只有正确的权限访问,以确保访问安全的用户。

但是您需要记住,如果您打开数据库端口进行外部访问,则数据库中的任何安全失败都将被公开。

如果您需要其他规则(例如特性选择),只需从用户选择组访问权限,则需要在数据库中编写读取parans的过程,并记住如果某个用户利用您的应用程序,他将能够通过其他parans查询您的数据库。

不仅是oracle或mysql,所有数据库都有很多安全选项可以提供外部访问,但要用于复杂的应用程序比构建服务层以确保安全访问更困难。

并且在默认情况下,您在直接SQL查询咨询中没有crypt通信。

1

只要确保它从数据库中获取数据的用户没有权限执行任何不需要的操作,如删除表。

具有只读权限应该做的伎俩

+1

有趣的是,我没有提到在将它传递给MySQL之前没有信任用户输入并正确转义它...即使用户只能执行SELECT,也可能不希望他们从数据库中“选择”任意数据通过SQL注入... – Romain

+0

MySQL的ADO.Net驱动程序有一个相当不错的系统,它将参数传递给在作为查询执行之前进行验证的命令。我发现的东西比使用mysqli界面和所有这些更适合使用????????????和“ssiissdd”的东西。 –

相关问题