我在尝试使用 Azure 函数将数据加载到 Azure 数据库时不断收到错误

I keep receiving an error while trying to load data to Azure DataBase using Azure Function

我创建了一个 Azure 函数来将数据从 Eudonet CRM 加载到我的 Azure SQL 数据库。我有两个数据库:

  1. 命名数据仓库
  2. named Datawarehouse-Dev 两个数据库完全相同并且在同一台服务器上。

当我将数据直接加载到“Datawarehouse”时,副本工作正常,但是当我将数据库名称更改为“Datawarehouse-Dev”时,我收到以下错误:

Index #0 Message: Login failed for user 'AzureFunction'. LineNumber: 65536 Source: Core .Net SqlClient Data Provider Procedure: Error Code:18456

-- Sql server error. If error code <17: => check sql transac code (user error). Else: => software or hardware errors (check availability of database)

Login failed for user 'AzureFunction'.

如果有人知道问题出在哪里,我将不胜感激,但我也不明白为什么会出现身份验证错误,因为它们都在同一台服务器上,并且使用相同的方式访问user/password.

提前致谢

虽然 @adnane 已经解决了将连接字符串直接用于函数应用程序设置而不是将其存储到 Vault 中后的问题。这种方法可能会危及应用程序的安全性,因为直接使用连接字符串可能会将其暴露给未经授权的人。

Azure Key Vault 是以安全和集中的方式保存我们的应用程序凭据的好地方。随着我们的 Azure 解决方案的发展,将机密转移到 Key Vault 变得更加重要。

如果有人仍在寻找通过将连接字符串存储在 Azure Key Vault 中然后在函数中使用它的解决方案,请按照以下步骤操作。

首先,打开 Azure Key Vault 服务并从设置菜单select访问策略。然后 select + 添加新的 访问策略。

然后选择Select principal并搜索Function App的名称,如下例所示。

一旦您的委托人selected 选择秘密权限 菜单。在这种情况下,我们只需要从 Key Vault 中获取秘密(具体阅读我们的连接字符串)。因此,只检查 Get 权限,然后 select OK.

最后,select 保存来存放新的函数app-demo-mw访问策略。

正在将机密添加到 AZURE 密钥保管库

向 Azure Key Vault 添加机密非常简单。从 Key Vault,Settings 菜单 select Secrets 然后 select + Generate/Import 秘密.

对于 Key Vault 机密,需要两个值 – 名称和值。在这种情况下,我们调用了我们的秘密 OrderManagementDbConnectionString 并将我们的 SQL 数据库连接字符串作为值。 Select 创建 保存秘密。

默认情况下,密码是 Enabled,因此可以使用了。创建秘密后,我们需要获取其 URI(标识秘密的唯一位置)。转到设置菜单和select秘密。我们将在这里找到我们最近添加的秘密 (OrderManagementDbConnectionString)。 Select 这个秘密,我们会看到它是列表中的唯一版本。

Select 当前版本的秘密并复制其秘密标识符。标识符是具有以下模式的 URI:https:////.

从 AZURE FUNCTION 应用程序中的密钥保管库获取秘密

返回 Azure Function App (functionapp-demo-mw) 并在 Overview 选项卡上,select Configuration已配置 特色部分。

嗯,Select + 新应用程序 设置。输入一个描述新设置的名称(我们输入了 OrderManagementConnectionString)。去年年底,微软增加了一个选项,可以直接从应用程序设置中获取 Key Vault 机密。这大大简化了以前使用秘密的方式。因此,将设置的值设置为以下格式的秘密引用:

@Microsoft.KeyVault(SecretUri=**secret_uri_with_version**)

我们只需要将 secret_uri_with_version 替换为我们之前从 Azure Key Vault 中的秘密复制的值。

在 Azure Function 中,您只需从应用程序设置中检索值并使用它,就像它直接存储在应用程序设置中的连接字符串一样。

// get value from appliction settings
var connectionString = Environment.GetEnvironmentVariable("OrderManagementConnectionString");
// create connection
SqlConnection connection = new SqlConnection(connectionString);