MySQL: не удалось войти в систему для пользователя

Я попытался подключиться к моей базе данных SQL, размещенной на Plesk, с InterServer, используя C# ASP.NET MVC. Несмотря на многочисленные усилия, он, кажется, никогда не хочет подключаться. Что я делаю неправильно?

Я много раз пытался изменить строку подключения. Служба поддержки Plesk и InterServer просит меня развернуть мой код и получить доступ к базе данных через локальный хост. В связи с этим я пробовал следующие строки подключения:

"SERVER=localhost;DATABASE=databasename;UID=username;PASSWORD=password;"
"SERVER=localhost:3306;DATABASE=databasename;UID=username;PASSWORD=password;"
"SERVER=localhost;PORT=3306;DATABASE=databasename;UID=username;PASSWORD=password;"
"SERVER=(Local);DATABASE=databasename;UID=username;PASSWORD=password;"

Я попытался поменять местами «Сервер» с «Источником данных», среди других изменений ключевых слов. Я также пытался установить для Trusted_Connection значение true и false, а для Integrated Security — значение true и false. Кажется, когда я пытаюсь установить для них значение true, приложение пытается войти в систему, используя мое имя пользователя Plesk, а не идентификатор пользователя, который я указал в строке подключения. Этот пользователь не связан с базой данных, и я не могу связать его с панелью управления Plesk, насколько мне известно.

Я также попытался использовать строку подключения по умолчанию в панели управления Plesk вместе с парой модификаций указанных строк подключения, одна из которых даже была предоставлена ​​службой поддержки InterServer, поскольку они подозревают, что ошибка связана с моими строками подключения. Вот эти строки:

"data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
"Data Source=(IPAddressWasHere)\MSSQLSERVER2017;Initial Catalog=nlstatic;Persist Security Info=True;User ID=username;Password=password"
"Data Source=.\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\db.mdf;Initial Catalog=Portal.Web;Integrated Security=True"
"Data Source=.\SQLExpress;Initial Catalog=localhost;Integrated Security=True"

Я также попытался изменить имя доказывающего с System.Data.SqlClient на MySql.Data.SqlClient, но это, похоже, не изменило сообщение об ошибке. Лично я подозреваю, что проблема связана не с настройкой строки подключения, а с конфигурацией базы данных MySQL или ее настройками.

Несмотря на попытки обратиться в службу поддержки InterServer за помощью по этому поводу, они отказываются разбираться в этом вопросе. Вместо этого они однажды попросили меня «правильно настроить мой VPS» (у меня вообще нет VPS с ними) и попытались убедить меня, что я пытаюсь подключиться через ODBC, когда я четко заявил, что это было через строки подключения.

Если это уместно, вот мой код С# о том, как я использую строку подключения, хотя лично я не считаю это причиной:

        public List<string> GetEffectByID(int id)
        {
            List<string> results = new List<string>();
            SqlConnection conn;
            string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

            conn = new SqlConnection(connectionString);

            try
            {
                using (SqlCommand command = new SqlCommand("getFxById", conn) { CommandType = CommandType.StoredProcedure })
                {
                    conn.Open();
                    using (SqlDataReader dr = command.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            results.Add(dr["myColumn"].ToString());
                        }
                    }
                    conn.Close();
                    return results;
                }
            } catch(Exception e)
            {
                if (conn.State == ConnectionState.Open) conn.Close();
                return new List<string>() { e.ToString() };
            }
        }

Эта хранимая процедура определенно существует в моей базе данных и работает в phpMyAdmin.

Есть ли что-то, что я пропустил на протяжении всего этого процесса? Я ожидаю, что он сможет подключиться и запустить хранимую процедуру, когда мой View вызовет функцию. Несмотря на это, используя методы, предоставляемые Plesk/InterServer, он утверждает, что сервер не найден/не доступен. Когда я пытаюсь использовать созданные мной строки подключения (без использования встроенной безопасности), вместо этого появляется следующее сообщение об ошибке:

System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'Shizuku'. at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.Open() at (Code file was here) ClientConnectionId:953f6859-a48b-4f58-a0b8-bef0702911a3 Error Number:18456,State:1,Class:14

Мне кажется, что эта ошибка означает, что я сейчас ближе к решению проблемы, но я не совсем уверен. Есть ли что-то, что я не пробовал, или какая-то ошибка, которую я сделал, которую я просто пропустил?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
587
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обнаружил ошибку: мой хост, InterServer, отклонял соединение, утверждая, что «соединение с локальным хостом было удаленным соединением». После нескольких часов общения со службой поддержки я, наконец, запросил возврат средств.

После этого агент поддержки, наконец, начал отчаянно пытаться заставить его работать, пытаясь найти решение, изменив мой Web.config, поскольку он был убежден, что это моя проблема, а не его. Безрезультатно, он сделал тестовый домен и скопировал мои файлы/базу данных. Конечно, у него не было моего кода C#, и это привело к ошибке «Объект не установлен в ссылку» для оператора создания объекта (с использованием нового ключевого слова). В крайнем случае он создал PHP-файл, который буквально гласил: «Соединение успешно выполнено» и не содержал реального кода, а затем прислал мне ссылку на него, заявив, что «ошибка была не на стороне сервера, понимаете?»

Решение моей проблемы заключалось в том, чтобы не покупать виртуальный хостинг у InterServer и, возможно, даже не использовать InterServer в целом. Их поддержка ужасна, и они используют такие теневые тактики, чтобы клиенты могли устранять неполадки после 30-дневного периода возврата денег. Предостережение для покупателя.

Другие вопросы по теме