Я пытаюсь создать механизм входа в систему, с помощью которого вы можете получить доступ к удаленной базе данных SQL Server 2008 R2 в частной сети, если учетные данные верны. Я намерен внедрить базу данных на своем рабочем сервере, а эту программу на клиенте, который находится в той же подсети, что и сервер. Вот мой код:
Func Login()
$loginGUI = GUICreate("Login", 250, 150, -1, -1) ; will create a dialog box that when displayed is centered
GUISetState(@SW_SHOW)
GUICtrlCreateLabel ( "Input valid credentials to login", 40, 10,-1,-1)
GUICtrlCreateLabel ( "Username", 40, 40,-1,-1)
Local $userInput = GUICtrlCreateInput("", 100, 37, 100, 20)
GUICtrlSetState($userInput, $GUI_FOCUS)
GUICtrlCreateLabel ( "Password", 40, 70,-1,-1)
Local $passwordInput = GUICtrlCreateInput("", 100, 67, 100, 20, $ES_PASSWORD)
Local $loginButton = GUICtrlCreateButton("Login", 40, 105, 70)
Local $exitButton = GUICtrlCreateButton("Exit", 130, 105, 70)
GUISetState()
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg(1)
Switch $msg[0]
Case $loginButton
$user = GUICtrlRead($userInput)
$password = GUICtrlRead($passwordInput)
Global $loginCon = ObjCreate( "ADODB.Connection" )
With $loginCon
.ConnectionString =("DRIVER={SQL Server};SERVER=192.168.1.30\SQLEXPRESS;DATABASE=Test;UID="&$user&";PWD="&$password&";")
.Open
EndWith
If ($user ="" and $password="") or @error Then
MsgBox(48, "Login error", "Connection failed! Wrong Username/Password.")
GUICtrlSetData($userInput, "")
GUICtrlSetData($passwordInput, "")
GUICtrlSetState($userInput, $GUI_FOCUS)
Else
$loginCon.Close
GUIDelete()
Main()
ExitLoop
EndIf
Case $exitButton
GUIDelete()
ExitLoop
Case $GUI_EVENT_CLOSE
GUIDelete()
ExitLoop
EndSwitch
WEnd
EndFunc
Я также сделал следующие действия:
- Используется SQL Server Management Studio для разрешения удаленных подключений, а также соответствующих разрешений для правильного пользователя для доступа к базе данных.
- Использовал Диспетчер конфигурации SQL Server, чтобы включить браузер SQL Server и протокол TCP/IP с правильными конфигурациями для доступа к серверу.
- Создано правило входящего и исходящего трафика брандмауэра, которое разрешает доступ к TCP-порту 1433 и UDP-порту 1434 для сервера и клиента (на всякий случай).
- Добавлены
sqlservr.exe
иsqlbrowser.exe
в список разрешенных программ брандмауэра. - На клиентском ПК установлен SQL Server Native Client 2008 R2.
Я мог локально подключиться к своей базе данных, используя IP-адрес сервера, но при попытке подключиться с удаленного клиента к серверу я получаю следующую ошибку:
описание ошибки: [Microsoft][Драйвер ODBC SQL Server][DBNETLIB]SQL Server не существует или доступ запрещен.
Как ни странно, я мог подключиться с удаленного клиента, используя sqlcmd
. Я также должен упомянуть, что в настоящее время я использую свой ноутбук для хранения своей тестовой базы данных. Его IP назначается сервером DCHP с работы и всегда остается неизменным.
Является ли мой код неправильным или мне нужно выполнить дополнительные настройки сервера/клиента?