如何将azure数据库导出到blob存储

时间:2018-02-02 11:57:22

标签: c# database azure azure-sdk-.net

我需要确切知道如何使用c#登录Azure。

我基本上想要这样做,但是从代码中: ]链接](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-export

以下是我试图通过互联网复制的代码: 但我不知道如何生成令牌。

                SqlManagementClient managementClient = new SqlManagementClient(new TokenCloudCredentials(subscriptionId, GetAccessToken(tenantId, clientId, secretKey)));

        var exportParams = new DacExportParameters()
        {
            BlobCredentials = new DacExportParameters.BlobCredentialsParameter()
            {
                StorageAccessKey = storageKey,
                Uri = new Uri(baseStorageUri)
            },
            ConnectionInfo = new DacExportParameters.ConnectionInfoParameter()
            {
                ServerName = azureSqlServer,
                DatabaseName = azureSqlDatabase,
                UserName = adminLogin,
                Password = adminPassword
            }
        };
        var exportResult = managementClient.Dac.Export(azureSqlServerName, exportParams);

我有一个GetToken函数,但我不知道该把它带到哪里 租户+客户ID +秘密

  private static string GetAccessToken(string tenantId, string 
          clientId, string secretKey)
        {
               var authenticationContext = new 

             AuthenticationContext($"https://login.windows.net/{tenantId}");
                   var credential = new ClientCredential(clientId, secretKey);
                  var result =authenticationContext
                 .AcquireTokenAsync("https://management.core.windows.net/",
            credential);

        if (result == null)
        {
            throw new InvalidOperationException("Failed to obtain the JWT token");
        }

        var token = result.Result.AccessToken;
        return token;
    }

之前曾问过这个问题 Azure Database export with C# 但我需要查看有关如何获取连接信息的实际代码和说明。

1 个答案:

答案 0 :(得分:2)

  

我需要查看有关如何获取连接信息的实际代码和说明。

我建议您按照此tutorial关于注册AAD应用程序并添加密钥。此外,您还可以关注Using the Azure ARM REST API – Get Access Token

  

SqlManagementClient managementClient = new SqlManagementClient(new TokenCloudCredentials(subscriptionId,GetAccessToken(tenantId,clientId,secretKey)));

根据您的代码,我假设您使用的是包Microsoft.WindowsAzure.Management.Sql,如果您使用TokenCloudCredentials,则可能会收到以下错误响应:

enter image description here

AFAIK,Microsoft.WindowsAzure.Management.Libraries需要X509Certificate2身份验证,您需要为CertificateCloudCredentials构建SqlManagementClient。要在您的订阅下上传管理证书,您可以关注Upload an Azure Service Management Certificate。要检索X509Certificate2实例,您可以按照here中使用管理证书的身份验证部分下的代码段进行操作。

对于基于令牌的身份验证,您可以使用包Microsoft.Azure.Management.Sql并按如下方式构建SqlManagementClient

var sqlManagement = new SqlManagementClient(new TokenCredentials("{access-token}"));

此外,您需要在调用https://management.core.windows.net/方法时将资源从https://management.azure.com/更改为AcquireTokenAsync