Marian Hluscu
Marian Hluscu

Reputation: 33

How to export azure database to blob storage

I need to know exactly how to login to Azure, using c#.

I basically want to do this, but from the code: ]a link](https://learn.microsoft.com/en-us/azure/sql-database/sql-database-export)

Here is the code I copied from the internet trying to achieve this: But I don't know how to generate the token.

                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);

I have a GetToken function, but I have no idea where to take the tenant + client id + secret

  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;
    }

This question was asked before Azure Database export with C# but I need to see the actual code and explanation on how to get the connection info.

Upvotes: 2

Views: 428

Answers (1)

Bruce Chen
Bruce Chen

Reputation: 18465

I need to see the actual code and explanation on how to get the connection info.

I would recommend you follow this tutorial about registering your AAD application and adding the secret key. Moreover, you could also follow Using the Azure ARM REST API – Get Access Token.

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

Based on your code, I assumed that you are using the package Microsoft.WindowsAzure.Management.Sql, if you use the TokenCloudCredentials, you may receive the following error response:

enter image description here

AFAIK, Microsoft.WindowsAzure.Management.Libraries requires the X509Certificate2 authentication, you need to construct the CertificateCloudCredentials for your SqlManagementClient. For uploading a management certificate under your subscription, you could follow Upload an Azure Service Management Certificate. For retrieving the X509Certificate2 instance, you could follow the code snippet under the Authenticate using a management certificate section from here.

For token-based authentication, you could use the package Microsoft.Azure.Management.Sql and construct your SqlManagementClient as follows:

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

Moreover, you need to change the resource from https://management.core.windows.net/ to https://management.azure.com/ when invoking the AcquireTokenAsync method.

Upvotes: 2

Related Questions