Skip to content

Commit 414561b

Browse files
authored
Merge pull request Azure#11165 from amolagar5/myPowershellChanges
Update sql server AAD Admin to use 2019-06-01-preview API
2 parents 6f9411a + ab7e632 commit 414561b

11 files changed

+254
-46
lines changed

src/Sql/Sql/Az.Sql.psd1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,8 @@ CmdletsToExport = 'Get-AzSqlDatabaseTransparentDataEncryption',
252252
'Enable-AzSqlDatabaseSensitivityRecommendation',
253253
'Disable-AzSqlDatabaseSensitivityRecommendation',
254254
'Enable-AzSqlInstanceDatabaseSensitivityRecommendation',
255-
'Disable-AzSqlInstanceDatabaseSensitivityRecommendation'
255+
'Disable-AzSqlInstanceDatabaseSensitivityRecommendation',
256+
'Disable-AzSqlServerActiveDirectoryOnlyAuthentication'
256257

257258
# Variables to export from this module
258259
# VariablesToExport = @()

src/Sql/Sql/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
* Added support for cross subscription point in time restore on Managed Instances.
2525
* Added support for changing existing Sql Managed Instance hardware generation
2626
* Fixed `Update-AzSqlServerVulnerabilityAssessmentSetting` help examples: parameter/property output - EmailAdmins
27+
* Updating Azure SQL Server Active Azure administrator API to use 2019-06-01-preview api version.
2728

2829
## Version 2.2.0
2930
Fix New-AzSqlDatabaseSecondary cmdlet to check for PartnerDatabaseName existence instead of DatabaseName existence.

src/Sql/Sql/ServerActiveDirectoryAdministrator/Cmdlet/AzureSqlServerActiveDirectoryAdministratorCmdletBase.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15-
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
16-
using Microsoft.Azure.Commands.Common.Authentication.Models;
1715
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
1816
using Microsoft.Azure.Commands.Sql.Common;
1917
using Microsoft.Azure.Commands.Sql.ServerActiveDirectoryAdministrator.Model;

src/Sql/Sql/ServerActiveDirectoryAdministrator/Cmdlet/SetAzureSqlServerActiveDirectoryAdministrator.cs

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
14-
15-
using Hyak.Common;
1614
using Microsoft.Azure.Commands.Sql.ServerActiveDirectoryAdministrator.Model;
15+
using Microsoft.Rest.Azure;
1716
using System;
1817
using System.Collections.Generic;
1918
using System.Linq;
@@ -24,7 +23,7 @@ namespace Microsoft.Azure.Commands.Sql.ServerActiveDirectoryAdministrator.Cmdlet
2423
/// <summary>
2524
/// Cmdlet to create a new Azure SQL Server Active Directory administrator
2625
/// </summary>
27-
[Cmdlet("Set", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "SqlServerActiveDirectoryAdministrator",ConfirmImpact = ConfirmImpact.Medium, SupportsShouldProcess = true), OutputType(typeof(AzureSqlServerActiveDirectoryAdministratorModel))]
26+
[Cmdlet("Set", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "SqlServerActiveDirectoryAdministrator", ConfirmImpact = ConfirmImpact.Medium, SupportsShouldProcess = true), OutputType(typeof(AzureSqlServerActiveDirectoryAdministratorModel))]
2827
public class SetAzureSqlServerActiveDirectoryAdministrator : AzureSqlServerActiveDirectoryAdministratorCmdletBase
2928
{
3029
/// <summary>
@@ -47,19 +46,33 @@ public class SetAzureSqlServerActiveDirectoryAdministrator : AzureSqlServerActiv
4746
[ValidateNotNullOrEmpty()]
4847
public Guid ObjectId { get; set; }
4948

49+
/// <summary>
50+
/// Only Azure Active Directory authentication allowed
51+
/// </summary>
52+
[Parameter(Mandatory = false,
53+
ValueFromPipelineByPropertyName = true,
54+
Position = 4,
55+
HelpMessage = "Specifies if only Azure Active Directory authentication is allowed.")]
56+
[ValidateNotNullOrEmpty()]
57+
public bool? IsAzureOnlyAuthentication { get; set; }
58+
5059
/// <summary>
5160
/// Get the entities from the service
5261
/// </summary>
5362
/// <returns>The list of entities</returns>
5463
protected override IEnumerable<AzureSqlServerActiveDirectoryAdministratorModel> GetEntity()
5564
{
5665
List<AzureSqlServerActiveDirectoryAdministratorModel> currentActiveDirectoryAdmins = null;
66+
5767
try
5868
{
59-
currentActiveDirectoryAdmins = new List<AzureSqlServerActiveDirectoryAdministratorModel>()
69+
AzureSqlServerActiveDirectoryAdministratorModel model = ModelAdapter.GetServerActiveDirectoryAdministrator(this.ResourceGroupName, this.ServerName);
70+
71+
if (model != null)
6072
{
61-
ModelAdapter.GetServerActiveDirectoryAdministrator(this.ResourceGroupName, this.ServerName),
62-
};
73+
currentActiveDirectoryAdmins = new List<AzureSqlServerActiveDirectoryAdministratorModel>();
74+
currentActiveDirectoryAdmins.Add(model);
75+
}
6376
}
6477
catch (CloudException ex)
6578
{
@@ -69,6 +82,14 @@ protected override IEnumerable<AzureSqlServerActiveDirectoryAdministratorModel>
6982
throw;
7083
}
7184
}
85+
catch (Exception ex)
86+
{
87+
if ((ex.InnerException is CloudException ex1) &&
88+
ex1.Response.StatusCode != System.Net.HttpStatusCode.NotFound)
89+
{
90+
throw ex.InnerException ?? ex;
91+
}
92+
}
7293

7394
return currentActiveDirectoryAdmins;
7495
}
@@ -80,13 +101,14 @@ protected override IEnumerable<AzureSqlServerActiveDirectoryAdministratorModel>
80101
/// <returns>A list of models that was passed in</returns>
81102
protected override IEnumerable<AzureSqlServerActiveDirectoryAdministratorModel> ApplyUserInputToModel(IEnumerable<AzureSqlServerActiveDirectoryAdministratorModel> model)
82103
{
83-
List<Model.AzureSqlServerActiveDirectoryAdministratorModel> newEntity = new List<AzureSqlServerActiveDirectoryAdministratorModel>();
104+
List<Model.AzureSqlServerActiveDirectoryAdministratorModel> newEntity = new List<AzureSqlServerActiveDirectoryAdministratorModel>();
84105
newEntity.Add(new AzureSqlServerActiveDirectoryAdministratorModel()
85106
{
86107
ResourceGroupName = ResourceGroupName,
87108
ServerName = ServerName,
88109
DisplayName = DisplayName,
89110
ObjectId = ObjectId,
111+
IsAzureADOnlyAuthentication = IsAzureOnlyAuthentication,
90112
});
91113
return newEntity;
92114
}

src/Sql/Sql/ServerActiveDirectoryAdministrator/Model/AzureSqlServerActiveDirectoryAdministratorModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,10 @@ public class AzureSqlServerActiveDirectoryAdministratorModel
4040
/// Gets or sets the unique ID of the Azure SQL Server Active administrator admin object id
4141
/// </summary>
4242
public Guid ObjectId { get; set; }
43+
44+
/// <summary>
45+
/// Gets or sets the value to indicate if only Azure AD Only authentication is allowed
46+
/// </summary>
47+
public bool? IsAzureADOnlyAuthentication { get; set; }
4348
}
4449
}

src/Sql/Sql/ServerActiveDirectoryAdministrator/Services/AzureSqlServerActiveDirectoryAdministratorAdapter.cs

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414

1515
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
1616
using Microsoft.Azure.Commands.Sql.ServerActiveDirectoryAdministrator.Model;
17-
using Microsoft.Azure.Commands.Sql.Services;
18-
using Microsoft.Azure.Management.Sql.LegacySdk.Models;
17+
using Microsoft.Azure.Management.Sql.Models;
1918
using Microsoft.Azure.Graph.RBAC.Version1_6.ActiveDirectory;
2019
using System;
2120
using System.Collections.Generic;
@@ -113,10 +112,7 @@ internal ICollection<AzureSqlServerActiveDirectoryAdministratorModel> ListServer
113112
/// <returns>The upserted Azure SQL Server Active Directory administrator</returns>
114113
internal AzureSqlServerActiveDirectoryAdministratorModel UpsertServerActiveDirectoryAdministrator(string resourceGroup, string serverName, AzureSqlServerActiveDirectoryAdministratorModel model)
115114
{
116-
var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, new ServerAdministratorCreateOrUpdateParameters()
117-
{
118-
Properties = GetActiveDirectoryInformation(model.DisplayName, model.ObjectId)
119-
});
115+
var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, GetActiveDirectoryInformation(model.DisplayName, model.ObjectId, model.IsAzureADOnlyAuthentication));
120116

121117
return CreateServerActiveDirectoryAdministratorModelFromResponse(resourceGroup, serverName, resp);
122118
}
@@ -131,40 +127,59 @@ public void RemoveServerActiveDirectoryAdministrator(string resourceGroupName, s
131127
Communicator.Remove(resourceGroupName, serverName);
132128
}
133129

130+
/// <summary>
131+
/// Disable Azure Active Directory only authentication on a Azure SQL Server
132+
/// </summary>
133+
/// <param name="resourceGroup">The name of the resource group</param>
134+
/// <param name="serverName">The name of the Azure Sql ServerActiveDirectoryAdministrator Server</param>
135+
/// <returns>The upserted Azure SQL Server Active Directory administrator</returns>
136+
internal AzureSqlServerActiveDirectoryAdministratorModel DisableAzureADOnlyAuthenticaion(string resourceGroup, string serverName)
137+
{
138+
var resp = Communicator.Disable(resourceGroup, serverName);
139+
140+
return CreateServerActiveDirectoryAdministratorModelFromResponse(resourceGroup, serverName, resp);
141+
}
142+
134143
/// <summary>
135144
/// Converts the response from the service to a powershell database object
136145
/// </summary>
137146
/// <param name="resourceGroupName">The resource group the server is in</param>
138147
/// <param name="serverName">The name of the Azure Sql ServerActiveDirectoryAdministrator Server</param>
139148
/// <param name="admin">The service response</param>
140149
/// <returns>The converted model</returns>
141-
public static AzureSqlServerActiveDirectoryAdministratorModel CreateServerActiveDirectoryAdministratorModelFromResponse(string resourceGroup, string serverName, Management.Sql.LegacySdk.Models.ServerAdministrator admin)
150+
public static AzureSqlServerActiveDirectoryAdministratorModel CreateServerActiveDirectoryAdministratorModelFromResponse(string resourceGroup, string serverName, Management.Sql.Models.ServerAzureADAdministrator admin)
142151
{
143-
AzureSqlServerActiveDirectoryAdministratorModel model = new AzureSqlServerActiveDirectoryAdministratorModel();
144-
145-
model.ResourceGroupName = resourceGroup;
146-
model.ServerName = serverName;
147-
model.DisplayName = admin.Properties.Login;
148-
model.ObjectId = admin.Properties.Sid;
152+
if (admin != null)
153+
{
154+
AzureSqlServerActiveDirectoryAdministratorModel model = new AzureSqlServerActiveDirectoryAdministratorModel();
155+
156+
model.ResourceGroupName = resourceGroup;
157+
model.ServerName = serverName;
158+
model.DisplayName = admin.Login;
159+
model.ObjectId = admin.Sid;
160+
model.IsAzureADOnlyAuthentication = admin.AzureADOnlyAuthentication;
161+
return model;
162+
}
149163

150-
return model;
164+
return null;
151165
}
152166

153167
/// <summary>
154168
/// Verifies that the Azure Active Directory user or group exists, and will get the object id if it is not set.
155169
/// </summary>
156170
/// <param name="displayName">Azure Active Directory user or group display name</param>
157171
/// <param name="objectId">Azure Active Directory user or group object id</param>
172+
/// <param name="isAzureADOnlyAuthentication">Allow only Azure Active Directory authentication</param>
158173
/// <returns></returns>
159-
protected ServerAdministratorCreateOrUpdateProperties GetActiveDirectoryInformation(string displayName, Guid objectId)
174+
protected ServerAzureADAdministrator GetActiveDirectoryInformation(string displayName, Guid objectId, bool? isAzureADOnlyAuthentication)
160175
{
161176
// Gets the default Tenant id for the subscriptions
162177
Guid tenantId = GetTenantId();
163178

164179
// Check for a Azure Active Directory group. Recommended to always use group.
165180
IEnumerable<PSADGroup> groupList = null;
166181

167-
var filter = new ADObjectFilterOptions()
182+
var filter = new ADObjectFilterOptions()
168183
{
169184
Id = (objectId != null && objectId != Guid.Empty) ? objectId.ToString() : null,
170185
SearchString = displayName,
@@ -190,11 +205,13 @@ protected ServerAdministratorCreateOrUpdateProperties GetActiveDirectoryInformat
190205
throw new ArgumentException(string.Format(Microsoft.Azure.Commands.Sql.Properties.Resources.InvalidADGroupNotSecurity, displayName));
191206
}
192207

193-
return new ServerAdministratorCreateOrUpdateProperties()
208+
209+
return new ServerAzureADAdministrator()
194210
{
195211
Login = group.DisplayName,
196212
Sid = group.Id,
197213
TenantId = tenantId,
214+
AzureADOnlyAuthentication = isAzureADOnlyAuthentication,
198215
};
199216
}
200217

@@ -238,11 +255,12 @@ protected ServerAdministratorCreateOrUpdateProperties GetActiveDirectoryInformat
238255
// Only one user was found. Get the user display name and object id
239256
var obj = userList.First();
240257

241-
return new ServerAdministratorCreateOrUpdateProperties()
258+
return new ServerAzureADAdministrator()
242259
{
243260
Login = displayName,
244261
Sid = obj.Id,
245262
TenantId = tenantId,
263+
AzureADOnlyAuthentication = isAzureADOnlyAuthentication,
246264
};
247265
}
248266
}

src/Sql/Sql/ServerActiveDirectoryAdministrator/Services/AzureSqlServerActiveDirectoryAdministratorCommunicator.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
using Microsoft.Azure.Commands.Common.Authentication;
1616
using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
17-
using Microsoft.Azure.Management.Sql.LegacySdk;
18-
using Microsoft.Azure.Management.Sql.LegacySdk.Models;
17+
using Microsoft.Azure.Management.Sql;
18+
using Microsoft.Azure.Management.Sql.Models;
1919
using System.Collections.Generic;
2020

2121
namespace Microsoft.Azure.Commands.Sql.ServerActiveDirectoryAdministrator.Services
@@ -68,35 +68,41 @@ public AzureSqlServerActiveDirectoryAdministratorCommunicator(IAzureContext cont
6868
/// <summary>
6969
/// Gets the Azure SQL Server Active Directory administrator
7070
/// </summary>
71-
public Management.Sql.LegacySdk.Models.ServerAdministrator Get(string resourceGroupName, string serverName)
71+
public Management.Sql.Models.ServerAzureADAdministrator Get(string resourceGroupName, string serverName)
7272
{
73-
return GetCurrentSqlClient().ServerAdministrators.Get(resourceGroupName, serverName, ActiveDirectoryDefaultName).Administrator;
73+
return GetCurrentSqlClient().ServerAzureADAdministrators.GetAsync(resourceGroupName, serverName).Result;
7474
}
7575

7676
/// <summary>
7777
/// Lists Azure SQL Server Active Directory administrators
7878
/// </summary>
79-
public IList<Management.Sql.LegacySdk.Models.ServerAdministrator> List(string resourceGroupName, string serverName)
79+
public IEnumerable<Management.Sql.Models.ServerAzureADAdministrator> List(string resourceGroupName, string serverName)
8080
{
81-
return GetCurrentSqlClient().ServerAdministrators.List(resourceGroupName, serverName).Administrators;
81+
return GetCurrentSqlClient().ServerAzureADAdministrators.ListByServer(resourceGroupName, serverName);
8282
}
8383

8484
/// <summary>
8585
/// Creates or updates a Azure SQL Server Active Directory Administrator
8686
/// </summary>
87-
public Management.Sql.LegacySdk.Models.ServerAdministrator CreateOrUpdate(string resourceGroupName, string serverName, ServerAdministratorCreateOrUpdateParameters parameters)
87+
public Management.Sql.Models.ServerAzureADAdministrator CreateOrUpdate(string resourceGroupName, string serverName, ServerAzureADAdministrator parameters)
8888
{
89-
// Always set the type to active directory
90-
parameters.Properties.AdministratorType = ActiveDirectoryDefaultType;
91-
return GetCurrentSqlClient().ServerAdministrators.CreateOrUpdate(resourceGroupName, serverName, ActiveDirectoryDefaultName, parameters).ServerAdministrator;
89+
return GetCurrentSqlClient().ServerAzureADAdministrators.CreateOrUpdate(resourceGroupName, serverName, parameters);
9290
}
9391

9492
/// <summary>
9593
/// Deletes a Azure SQL Server Active Directory Administrator
9694
/// </summary>
9795
public void Remove(string resourceGroupName, string serverName)
9896
{
99-
GetCurrentSqlClient().ServerAdministrators.Delete(resourceGroupName, serverName, ActiveDirectoryDefaultName);
97+
GetCurrentSqlClient().ServerAzureADAdministrators.DeleteWithHttpMessagesAsync(resourceGroupName, serverName);
98+
}
99+
100+
/// <summary>
101+
/// Disables Azure Active Directory only authentication on a Azure SQL Server
102+
/// </summary>
103+
public Management.Sql.Models.ServerAzureADAdministrator Disable(string resourceGroupName, string serverName)
104+
{
105+
return GetCurrentSqlClient().ServerAzureADAdministrators.DisableAzureADOnlyAuthenticationAsync(resourceGroupName, serverName).Result;
100106
}
101107

102108
/// <summary>
@@ -109,7 +115,7 @@ private SqlManagementClient GetCurrentSqlClient()
109115
// Get the SQL management client for the current subscription
110116
if (SqlClient == null)
111117
{
112-
SqlClient = AzureSession.Instance.ClientFactory.CreateClient<SqlManagementClient>(Context, AzureEnvironment.Endpoint.ResourceManager);
118+
SqlClient = AzureSession.Instance.ClientFactory.CreateArmClient<Management.Sql.SqlManagementClient>(Context, AzureEnvironment.Endpoint.ResourceManager);
113119
}
114120
return SqlClient;
115121
}

src/Sql/Sql/help/Az.Sql.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ Disables Advanced Data Security on a managed instance.
7171
### [Disable-AzSqlInstanceDatabaseSensitivityRecommendation](Disable-AzSqlInstanceDatabaseSensitivityRecommendation)
7272
Disbles sensitivity recommendations on columns in the Azure SQL managed instance database.
7373

74+
75+
### [Disable-AzSqlServerActiveDirectoryOnlyAuthentication](Disable-AzSqlServerActiveDirectoryOnlyAuthentication.md)
76+
Disables Azure AD only authentication for a specific SQL Server.
77+
7478
### [Disable-AzSqlServerAdvancedDataSecurity](Disable-AzSqlServerAdvancedDataSecurity.md)
7579
Disables Advanced Data Security on a server.
7680

0 commit comments

Comments
 (0)