From 5f17826359cc4759da99ff7c65bbc0b58a770463 Mon Sep 17 00:00:00 2001 From: Barbara Valdez <34872381+barbaravaldez@users.noreply.github.com> Date: Thu, 31 Aug 2023 09:52:58 -0700 Subject: [PATCH] Add security tab (#2187) --- .../ObjectTypes/Server/ServerHandler.cs | 4 +- .../ObjectTypes/Server/ServerInfo.cs | 3 + .../ObjectTypes/Server/ServerPrototype.cs | 162 ++++++++++++++---- 3 files changed, 136 insertions(+), 33 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerHandler.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerHandler.cs index 0062057c..cc751680 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerHandler.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerHandler.cs @@ -62,7 +62,9 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement MaxServerMemory = prototype.MaxServerMemory, AutoProcessorAffinityMaskForAll = prototype.AutoProcessorAffinityMaskForAll, AutoProcessorAffinityIOMaskForAll = prototype.AutoProcessorAffinityIOMaskForAll, - NumaNodes = prototype.NumaNodes + NumaNodes = prototype.NumaNodes, + AuthenticationMode = prototype.AuthenticationMode, + LoginAuditing = prototype.LoginAuditing }; } var context = new ServerViewContext(requestParams); diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerInfo.cs index 9d8cad7c..61c952a0 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerInfo.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerInfo.cs @@ -5,6 +5,7 @@ #nullable disable using System.Collections.Generic; +using Microsoft.SqlServer.Management.Smo; namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement { @@ -35,6 +36,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement public bool AutoProcessorAffinityMaskForAll { get; set; } public bool AutoProcessorAffinityIOMaskForAll { get; set; } public List NumaNodes { get; set; } + public ServerLoginMode AuthenticationMode { get; set; } + public AuditLevel LoginAuditing { get; set; } } public class NumericServerProperty diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerPrototype.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerPrototype.cs index 9b588dbb..690f53be 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerPrototype.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Server/ServerPrototype.cs @@ -331,6 +331,32 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement this.currentState.NumaNodes = value; } + } + + public ServerLoginMode AuthenticationMode + { + get + { + return this.currentState.AuthenticationMode; + } + set + { + this.currentState.AuthenticationMode = value; + } + + } + + public AuditLevel LoginAuditing + { + get + { + return this.currentState.LoginAuditing; + } + set + { + this.currentState.LoginAuditing = value; + } + } #endregion @@ -363,8 +389,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement { if (this.dataContainer.Server != null) { - Microsoft.SqlServer.Management.Smo.Server server = this.dataContainer.Server; - bool changesMade = false; + Server server = this.dataContainer.Server; bool alterServerConfig = false; bool sendCPUAffinityBeforeIO = false; bool sendIOAffinityBeforeCPU = false; @@ -397,16 +422,19 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement this.currentState.AffinityManagerProcessorMask.Clear(); this.currentState.AffinityManagerIOMask.Clear(); - changesMade = UpdateMemoryValues(this.dataContainer.Server); - - if (changesMade) + if (UpdateMemoryValues(this.dataContainer.Server)) { server.Configuration.Alter(true); } + + if (UpdateSecurityValues(this.dataContainer.Server)) + { + server.Alter(); + } } } - public bool UpdateMemoryValues(Microsoft.SqlServer.Management.Smo.Server server) + public bool UpdateMemoryValues(Server server) { bool changesMade = false; if (this.currentState.MinMemory.Value != this.originalState.MinMemory.Value) @@ -425,6 +453,25 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement return changesMade; } + public bool UpdateSecurityValues(Server server) + { + bool alterServer = false; + + if (this.currentState.AuthenticationMode != this.originalState.AuthenticationMode) + { + // set authentication + server.Settings.LoginMode = this.currentState.AuthenticationMode; + alterServer = true; + } + + if (this.currentState.LoginAuditing != this.originalState.LoginAuditing) + { + server.Settings.AuditLevel = this.currentState.LoginAuditing; + alterServer = true; + } + return alterServer; + } + private bool CheckCPUAffinityBeforeIO(SMO.Server smoServer) { for (int i = 0; i < this.NumaNodes.Count; i++) @@ -601,6 +648,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement this.AutoProcessorAffinityMaskForAll = serverInfo.AutoProcessorAffinityMaskForAll; this.AutoProcessorAffinityIOMaskForAll = serverInfo.AutoProcessorAffinityIOMaskForAll; this.NumaNodes = serverInfo.NumaNodes.ToList(); + this.AuthenticationMode = serverInfo.AuthenticationMode; + this.LoginAuditing = serverInfo.LoginAuditing; } /// @@ -636,6 +685,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement private bool autoProcessorAffinityMaskForAll = false; private bool autoProcessorAffinityIOMaskForAll = false; private List numaNodes = new List(); + private ServerLoginMode authenticationMode = ServerLoginMode.Integrated; + private AuditLevel loginAuditing = AuditLevel.None; private bool initialized = false; private Server server; @@ -652,32 +703,6 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement ConfigProperty serverMinMemoryProperty; #endregion - public AffinityManager AffinityManagerIOMask - { - get - { - return this.affinityManagerIOMask; - } - - set - { - this.affinityManagerIOMask = value; - } - } - - public AffinityManager AffinityManagerProcessorMask - { - get - { - return this.affinityManagerProcessorMask; - } - - set - { - this.affinityManagerProcessorMask = value; - } - } - #region Properties // General properties @@ -1197,6 +1222,49 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement } } + public ServerLoginMode AuthenticationMode + { + get + { + if (!this.initialized) + { + LoadData(); + } + + return this.authenticationMode; + } + set + { + if (this.initialized) + { + Logger.Error(SR.PropertyNotInitialized("AuthenticationMode")); + } + + this.authenticationMode = value; + } + } + + public AuditLevel LoginAuditing + { + get + { + if (!this.initialized) + { + LoadData(); + } + + return this.loginAuditing; + } + set + { + if (this.initialized) + { + Logger.Error(SR.PropertyNotInitialized("LoginAuditing")); + } + + this.loginAuditing = value; + } + } public Microsoft.SqlServer.Management.Smo.Server Server { @@ -1214,6 +1282,32 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement } } + public AffinityManager AffinityManagerIOMask + { + get + { + return this.affinityManagerIOMask; + } + + set + { + this.affinityManagerIOMask = value; + } + } + + public AffinityManager AffinityManagerProcessorMask + { + get + { + return this.affinityManagerProcessorMask; + } + + set + { + this.affinityManagerProcessorMask = value; + } + } + #endregion /// @@ -1278,6 +1372,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement result.autoProcessorAffinityMaskForAll = this.autoProcessorAffinityMaskForAll; result.autoProcessorAffinityIOMaskForAll = this.autoProcessorAffinityIOMaskForAll; result.numaNodes = this.numaNodes; + result.authenticationMode = this.authenticationMode; + result.loginAuditing = this.loginAuditing; result.server = this.server; return result; } @@ -1317,6 +1413,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement this.numaNodes = GetNumaNodes(); GetAutoProcessorsAffinity(); + this.authenticationMode = server.LoginMode; + this.loginAuditing = server.AuditLevel; } private void LoadMemoryProperties()