带有keyvault的数据工厂SQL连接字符串



我从Datafactory V2导出了arm模板,在导入模板时,它要求我手动输入SQL数据库连接字符串。为了尽量减少人与人之间的互动,我做了以下更改。

{
"name": "[concat(parameters('factoryName'), '/myFactory')]",
"type": "Microsoft.DataFactory/factories/linkedServices",
"apiVersion": "2018-06-01",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"connectionString": "[concat('Server=tcp:',parameters('sqlServerName'),'.database.windows.net,1433;Initial Catalog=', parameters('sqlDatabaseName'), ';Persist Security Info=False;User ID=',parameters('sqlServerUserName'),';Password=(password)',';MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30')]",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "AzureKeyVault1",
"type": "LinkedServiceReference"
},
"secretName": "sql-password"
}
}
},
"dependsOn": [
"[concat(variables('factoryId'), '/linkedServices/AzureKeyVault1')]"
]
},

因此,目前在部署到Datafactory V2并测试与该SQL服务器的连接时,我得到了

Cannot connect to SQL Database: 'tcp:mysqlserver.database.windows.net,1433', 
Database: 'mydatabase', User: 'admin'. Check the linked service configuration
is correct, and make sure the SQL Database firewall allows the integration runtime to access.
Login failed for user 'admin'., SqlErrorNumber=18456,

如果我在门户UI中手动输入所有连接,我可以很容易地连接到数据库并成功测试,所以这不是防火墙问题。

然后我认为可能有两个问题:

1.如何在连接字符串中使用keyvault中的密码。我在网上找不到太多关于它的信息。

  1. 当我打开创建的Sql链接服务时,我注意到完全限定域名丢失了,如果我手动添加它,则连接正常

SQL连接UI

将其作为备选答案/方法抛出。

将连接字符串整体存储在密钥库中。如果这样做,那么参考将看起来像:

{
"name": "[concat(parameters('factoryName'), '/',parameters('connectionNameAdventureWorks'))]",
"type": "Microsoft.DataFactory/factories/linkedServices",
"apiVersion": "2018-06-01",
"properties": {
"annotations": [],
"type": "AzureSqlDatabase",
"typeProperties": {
"connectionString": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "[variables('azkDataAnalyticsReferenceName')]",
"type": "LinkedServiceReference"
},
"secretName": "[variables('azkAdventureWorksSecretName')]"
}
}
},
"dependsOn": [
"[concat(variables('factoryId'), '/linkedServices/',variables('azkDataAnalyticsReferenceName'))]" 
]
}

更安全的方法是将数据工厂添加为托管身份,然后运行sql脚本来添加用户。如果这样做,那么根本不需要传递任何凭据。

一个缺点是,如果删除并重新创建DataFactory,则需要将托管标识权限重新分配给sql数据库。

相关内容

  • 没有找到相关文章

最新更新