#sql #sql-server #laravel #cpanel
Вопрос:
В настоящее время я нахожусь в процессе переноса своего локального приложения laravel в Интернет. Я использую cpanel для общего хостинга. В настоящее время мое приложение использует три разные базы данных. Обычная база данных MySQL, база данных microsoft azure и база данных microsoft sql server. В настоящее время я могу подключиться к 2 из трех баз данных, так как я не могу подключиться к базе данных MSSQL. Когда я пытаюсь подключиться к базе данных, я получаю следующую ошибку:
[ODBC Driver 17 for SQL Server]Login timeout expired (SQL: SELECT * FROM tblGlue)
Я знаю, что что-то идет не так, прежде чем он попытается аутентифицировать пользователя, так как я могу изменить свое имя пользователя или пароль на несуществующего пользователя, и я получаю ту же ошибку. Когда я подключился к своей базе данных azure, мне пришлось использовать хранимую процедуру sp_set_firewall_rule, чтобы разрешить IP-адресу моего веб-сайта доступ к базе данных. Есть ли что-то подобное, что я должен сделать для MSSQL, поскольку это единственное, что я могу придумать, что отличается. Вот конфигурация базы данных.
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => "xxxx",
'port' => "1433",
'database' => "TEAM",
'username' => "xxxx",
'password' => "xxxxx",
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
Также, когда я запускаю DB::connection(«sqlsrv»)->getDatabaseName (), я получаю хороший результат. Однако DB::соединение(«sqlsrv»)->getPdo() выдает ту же ошибку.
Я думаю, что сервер каким-то образом блокирует IP-адрес моего веб-сайта. Любые идеи о том, как я могу это исправить. Любая помощь будет очень признательна!
Комментарии:
1. Просто убедитесь, что ваш локальный экземпляр SQL Server допускает проверку подлинности SQL.
2. @Zhorov, если бы это было не так, позволило бы мне подключиться локально. Потому что, пока я работал над приложением локально, я мог без проблем подключиться к базе данных
3. @Zhorov Я думаю, что это так. Как и при входе в MS SQL management studio, для входа в систему я использую проверку подлинности SQL Server
4. Избегайте неработающих подключений, перепроверьте логику повторных попыток и проверьте, правильно ли настроен DNS, исходящие порты, поставщик услуг интернет-провайдера, прокси-сервер или перенаправления
Ответ №1:
Избегайте использования Select *
и возврата только необходимых строк. Попробуйте увеличить значение тайм-аута подключения. Я рекомендую использовать тайм-аут соединения не менее 30 секунд. Используйте параметр login_timeout
.
'mssql' => [
'driver' => 'sqlsrv',
'host' => 'CDBSQLSERVER',
'database' => 'MyDatabase',
'username' => 'XXXX',
'password' => 'XXXX',
'charset' => 'utf8',
'prefix' => '',
'login_timeout' => YOUR_TIMEOUT
]
Далее вы можете проверить или скопировать строку подключения для своей базы данных с портала Azure.
Используйте UID вместо имени пользователя.
Ваш клиент может помочь в диагностике, регистрируя все ошибки, с которыми он сталкивается. Возможно, вам удастся сопоставить записи журнала с данными об ошибках, которые база данных SQL регистрирует сама внутри.