From e721a4458820a0bff250aeb355edbc858295e803 Mon Sep 17 00:00:00 2001 From: Hai Cao Date: Fri, 3 Mar 2023 10:37:53 -0800 Subject: [PATCH] [User Management] Fix a few bugs in login handlers (#1897) --- .../Security/LoginData.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Security/LoginData.cs b/src/Microsoft.SqlTools.ServiceLayer/Security/LoginData.cs index 390c433d..f9b329d4 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Security/LoginData.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Security/LoginData.cs @@ -864,6 +864,10 @@ INNER JOIN sys.sql_logins AS sql_logins internal class LoginPrototype { private SqlCollationSensitiveStringComparer comparer = null; + private static string AZURE_SERVER_ROLE_ALTER_QUERY = +@"ALTER SERVER ROLE {0} + {1} MEMBER [{2}]"; + /// /// string of asterisks to display in lieu of the actual password @@ -912,7 +916,7 @@ INNER JOIN sys.sql_logins AS sql_logins private bool initialized = false; private Login login = null; private Microsoft.SqlServer.Management.Smo.Server server; - private static string defaultLanguageDisplay; + private static string defaultLanguageDisplay = string.Empty; private bool windowsAuthSupported = true; private bool aadAuthSupported = false; @@ -1352,6 +1356,7 @@ INNER JOIN sys.sql_logins AS sql_logins { LoginType = SqlServer.Management.Smo.LoginType.SqlLogin; } + LoadData(); } /// @@ -2088,7 +2093,9 @@ INNER JOIN sys.sql_logins AS sql_logins this.SqlPassword = login.Password; this.OldPassword = login.OldPassword; this.LoginType = GetLoginType(login); - if (this.DefaultLanguage != null && 0 != String.Compare(login.DefaultLanguage, SR.DefaultLanguagePlaceholder, StringComparison.Ordinal)) + if (this.DefaultLanguage != null + && 0 != String.Compare(login.DefaultLanguage, SR.DefaultLanguagePlaceholder, StringComparison.Ordinal) + && (server.DatabaseEngineType == DatabaseEngineType.Standalone|| server.DatabaseEngineEdition == DatabaseEngineEdition.SqlManagedInstance)) { this.DefaultLanguage = login.DefaultLanguage.Split(" - ")[1]; } @@ -2396,12 +2403,14 @@ INNER JOIN sys.sql_logins AS sql_logins // if the login is currently a member of the role, but wasn't originally a member, add the login to the role if (isCurrentlyARoleMember && !wasOriginallyARoleMember) { - //run query to add + // run query to add + server.ExecutionManager.ConnectionContext.ExecuteNonQuery(string.Format(AZURE_SERVER_ROLE_ALTER_QUERY, role, "ADD", this.LoginName)); } // if the login is not currently a member of the role, but originally was a member, remove the login from the role else if (!isCurrentlyARoleMember && wasOriginallyARoleMember) { //run query to drop + server.ExecutionManager.ConnectionContext.ExecuteNonQuery(string.Format(AZURE_SERVER_ROLE_ALTER_QUERY, role, "DROP", this.LoginName)); } } }