Azure SQL数据库应用程序

时间:2019-07-11 13:04:18

标签: .net azure azure-sql-database

我正在构建需要SQL数据库的桌面应用程序。我希望为客户提供2种选择:本地和云数据库。对于云数据库,我打算使用Azure SQL服务器。要求是:

  1. 我希望有某种可供客户使用的“ Azure DB凭据”,它们只能访问数据库(我将提供)。
  2. 我不希望客户端必须安装任何其他软件才能使用该应用程序。

我的问题是,在测试中,我遇到了“不允许IP地址连接到服务器”。这带来了一个问题:

  1. 客户端将具有许多不同的IP地址,因此我不能允许使用单个IP地址。
  2. 出于安全考虑,我不想打开所有 IP地址。

听起来很奇怪,我找不到解决该问题的即用型解决方案。我是一个新程序员,也许谷歌还不够用……也就是说,这似乎是一个简单的问题,没有一个简单的明显解决方案。

我想出的最好的解决方案是应用程序中的嵌入式Open-VPN Client。但是,这似乎不必要地复杂。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

为简单起见,在您的应用程序上使用基于令牌的身份验证。

public async Task<string> GetAccessTokenAsync(string clientId, string clientSecret, string authority, string resource, string scope)
{
    var authContext = new AuthenticationContext(authority, TokenCache.DefaultShared);
    var clientCred = new ClientCredential(clientId, clientSecret);
    var result = await authContext.AcquireTokenAsync(resource, clientCred);

    if (result == null)
    {
        throw new InvalidOperationException("Could not get token");
    }

    return result.AccessToken;
}

使用令牌创建SQL连接。

public async Task<SqlConnection> GetSqlConnectionAsync(string tenantId, string clientId, string clientSecret, string dbServer, string dbName)
{
    var authority = string.Format("https://login.windows.net/{0}", tenantId);
    var resource = "https://database.windows.net/";
    var scope = "";
    var token = await GetTokenAsync(clientId, clientSecret, authority, resource, scope);

    var builder = new SqlConnectionStringBuilder();
    builder["Data Source"] = $"{dbServer}.database.windows.net";
    builder["Initial Catalog"] = dbName;
    builder["Connect Timeout"] = 30;
    builder["Persist Security Info"] = false;
    builder["TrustServerCertificate"] = false;
    builder["Encrypt"] = true;
    builder["MultipleActiveResultSets"] = false;

    var con = new SqlConnection(builder.ToString());
    con.AccessToken = token;
    return con;
}

您甚至不必担心令牌过期,因为AzureServiceTokenProvider负责缓存。

this文章中对其进行了解。

答案 1 :(得分:0)

您是否考虑过Azure防火墙?添加客户端IP或IP地址范围以限制Azure SQL数据库的访问。

在门户网站上设置服务器防火墙: enter image description here

防火墙设置:添加客户端IP或IP地址范围以提供对数据库的访问。 enter image description here

有关更多详细信息,请参见:

  1. Azure SQL Database and SQL Data Warehouse IP firewall rules
  2. Create a server-level IP firewall rule using Azure Portal

希望这会有所帮助。