如何通过Xamarin App从Azure SQL提取数据?讲解

时间:2019-06-08 22:38:01

标签: sql-server azure xamarin

我正在创建一个简单的应用程序,我需要在该应用程序中获取数据并将其提取到DB。我从Xamarin应用程序中发现,使用HTTP请求到数据库而不是直接连接到数据库是标准的方法。

我创建Azure SQL数据库,并创建与此数据库连接的应用程序。但是我真的找不到现在应该如何工作。

没有很多教程,或者没有完整描述它们。 我读了这个https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-started#download-and-run-the-xamarinforms-solution

我发现有很多关于此的参考,但似乎已经过时了。每个人都建议从

部分下载项目
  

运行Xamarin.Forms解决方案

     
    

在移动应用程序的设置刀片上,单击“快速入门”(在“部署”下)> Xamarin.Forms。在第3步下,单击“创建新应用”(如果尚未选择)。接下来,点击下载按钮。

  

在此选项卡下,我仅参考下一个教程,而对Project Download则没有任何参考。 (下面的截图) https://imgur.com/THCdUE1

如果我做错了事,可以给我一些建议吗?或链接到更新的教程?我对此很绝望

非常感谢

1 个答案:

答案 0 :(得分:1)

Azure SQL不是HTTP / s服务-它在端口1433上运行专有的SQL Server协议,就像内部版本的SQL Server一样。

如果您尝试从Xamarin应用程序直接连接到SQL Server,则几乎肯定会犯错。这样做需要向您的Xamarin应用程序提供凭据,该凭据可以将直接直接连接到您的数据库,这将打开数据库,使恶意用户可以执行他们想做的几乎任何事情。这种2层应用程序很危险的原因是Xamarin应用程序在不受信任的设备(您的用户的移动设备)上运行,并且恶意用户可以拦截您的应用程序在内存中的任何数据,包括数据库凭据。然后,他们可以使用这些凭据来访问您的数据库。除非您要为每个用户使用唯一的数据库凭据(非常不切实际),并在SQL Server中设置非常严格的安全角色,否则就不可能阻止恶意用户访问所有其他用户的数据库(这非常重要,很坏)。另一个问题是,许多网络阻止了端口1433上的流量,或者仅允许通过HTTPS代理服务器进行访问,因此,如果您的应用程序尝试直接连接到SQL,则在许多网络上将无法运行。

这是您问题的答案,但是请不要这样做: 如果确定已正确维护了安全性,则应该能够安装System.Data.SqlClient nuget软件包,并像使用任何.NET应用程序一样使用该软件包与SQL Server通信。这是Microsoft的code example

这是我对您应该怎么做的看法: 大多数Xamarin应用程序与Azure SQL数据库通信的正确方法是通过中间应用程序服务器。

如果您的应用程序访问特定于用户的数据,则应在其中包含每个用户的凭据(用户登录时将用户名和密码交换为授权令牌是一种常见技术)。然后,Xamarin应用程序将使用这些用户凭据使用HTTPS向您的应用程序服务器发出请求。应用程序服务器将验证用户凭据(验证它们是否合法,并根据用户身份对请求的数据进行授权),然后向Azure SQL发出请求。

如果您的应用程序仅匿名访问公共数据,则您可以对应用程序服务器进行未经身份验证的请求,这将盲目地从Azure SQL请求该数据并将其返回给客户端(尽管它还会将相同的数据返回给任何攻击者) Internet,因此请确保如果您使用这种方法,那么您打算将所有数据公开给全世界。

在两种情况下,您的应用程序服务器都是与Azure SQL通信的唯一组件。对于.NET应用程序,通常可以通过System.Data.SqlClient来完成,或者可以通过实体Framreworks之类的ORM间接地完成。这种3层方法的优点是不受信任的客户端层没有对数据库层的无限制访问。只有中间应用程序服务器层具有SQL Server的凭据,并且它是受信任的并且在安全环境(您管理的服务器,而不是最终用户的移动设备)中运行。这意味着攻击者无法截获数据库凭证并滥用它们。这也意味着您的应用程序仅需要HTTPS数据访问权即可运行,因此您的应用程序几乎可以在任何网络上运行。

这可能不是您要寻找的答案,因为它涉及编写必须由您托管的整个应用程序服务器(如果您已经在使用Azure SQL,则我的建议是Azure App Service)。它还要求您在服务器上实现API,然后为Xamarin应用程序编写API客户端。这是一笔不小的工作。