Search code examples
c#sqlconnection

Change the SqlConnection,Credentials property


So i have a login page and i have to implement a validation: 'If the user is "sa" then it should connect to the Database using that users credentials', which means i have to modify the credentials of my SqlConnection object:

        if(username.Equals("sa", StringComparison.OrdinalIgnoreCase))
        {
            var securePassword = new System.Security.SecureString();
            foreach(char character in password)
            {
                securePassword.AppendChar(character);
            }

            securePassword.MakeReadOnly();
            var credentials = new SqlCredential(username, securePassword);
            sqlConn.Close();
            sqlConn.Credential = credentials;

            sqlConn.Open();

            return true;
        }

But im getting an exception in sqlConn.Credential = credentials; even though the property is not readonly

InvalidOperationException: Cannot use Credential with UserID, UID, Password, or PWD connection string keywords.

Is there any other way to change the Credentials property?

Thanks in advance.


Solution

  • It seems like you can modify the credentials if the SqlConnection has an user and password. I use the examples of this tutorial to make it work:

            if (username.Equals("sa", StringComparison.OrdinalIgnoreCase))
            {
                using (SqlConnection conn = new SqlConnection(string.Format("Server={0};Initial Catalog={1};", sqlConn.DataSource, sqlConn.Database)))
                {
                    var securePassword = new System.Security.SecureString();
                    foreach (char character in password)
                    {
                        securePassword.AppendChar(character);
                    }
    
                    securePassword.MakeReadOnly();
    
                    var credentials = new SqlCredential(username, securePassword);
                    conn.Credential = credentials;
    
                    conn.Open();
    
                    return true;
                }
            }
    

    Since i couldn't modify the Credential property i made a copy of my SqlConnection object without the username and password in the connectionString. That way i can add new Credential later. Hope this helps anyone else facing a similar problem.