【发布时间】:2020-07-30 18:18:37
【问题描述】:
我从 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 中手动输入所有连接,我可以轻松连接到数据库并测试成功,所以这不是防火墙问题。
那么我认为可能有2个问题:
1.keyvault 的密码如何在连接字符串中使用。我在网上没有找到太多关于它的信息。
- 当我打开创建的 Sql Linked 服务时,我注意到完全限定域名丢失,如果我手动添加它,则连接正常。
【问题讨论】:
-
密码是否有特殊字符?通过此方法检索它时,这可能会导致问题。审计日志还显示密钥保管库的什么内容?数据工厂是否实际检索了凭据
-
密码确实有'+'和'='。如果密码包含特殊字符,我该如何处理此类问题?应该检索凭据,我确实为datafactory添加了访问Keyvault的权限,并且在使用UI作为我附加的图片进行连接时,我可以轻松建立连接。我只需要手动输入完全限定的域名...这是另一个问题,为什么该字段没有从 arm 模板中填充?
-
+ 和 = 应该没问题
标签: azure azure-data-factory-2 arm-template