繁体   English   中英

Azure SQL数据库应用程序

[英]Azure SQL Database Application

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

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

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

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

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

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

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

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负责缓存。

了解它的这个文章。

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

在门户上设置服务器防火墙: 在此处输入图片说明

防火墙设置:添加客户端IP或IP地址范围以提供对数据库的访问。 在此处输入图片说明

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

  1. Azure SQL数据库和SQL数据仓库IP防火墙规则
  2. 使用Azure Portal创建服务器级IP防火墙规则

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM