Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

вторник, 5 апреля 2011 г.

PHP. Подключение к MSSQL (удаленно).

Так случилось что невозможно установить постоянный порт для удаленного MSSQL сервера. Почему - это длинная и скучная история. Порт назначается динамически при старте сервера бд.

Есть админ доступ на сервер через удаленный рабочий стол Windows.

Как настроить SQL Server 2005 для удаленных подключений - читаем тут
http://support.microsoft.com/kb/914277

Вкратце:

a. Разрешите удаленные подключения к SQL Server 2005
  • 1. Нажмите кнопку Пуск, выберите Программы, Microsoft SQL Server 2005, перейдите к пункту Средства настройки, затем выберите Настройка контактной зоны SQL Server.
  • 2. На странице Настройка контактной зоны SQL Server 2005 выберите Настройка контактной зоны для служб и соединений.
  • 3. На странице Настройка контактной зоны для служб и соединений разверните Database Engine, выберите Удаленные соединения, затем Локальные и удаленные соединения, выберите нужный протокол для вашей сетевой среды и нажмите кнопку Применить. Примечание. Нажмите кнопку OK при появлении следующего сообщения Изменения в настройках соединений вступят в силу только после перезапуска службы компонента Database Engine.
  • 4. На странице Настройка контактной зоны для служб и соединений разверните Database Engine, выберите Службы, нажмите кнопку Стоп, дождитесь остановки службы MSSQLSERVER, затем нажмите кнопку Пуск для повторного запуска службы MSSQLSERVER.

b. Включите службу SQL Server Browser

Об обозревателе подробно читаем тут - http://msdn.microsoft.com/ru-ru/library/ms165724%28v=sql.90%29.aspx

  • 1. Нажмите кнопку Пуск, выберите Программы, Microsoft SQL Server 2005, перейдите к пункту Средства настройки, затем выберите Настройка контактной зоны SQL Server.
  • 2. На странице Настройка контактной зоны SQL Server 2005 выберите Настройка контактной зоны для служб и соединений.
  • 3. На странице Настройка контактной зоны для служб и соединений выберите SQL Server Browser, выберите Авто для Тип запуска, затем нажмите кнопку Применить. Примечание. При выборе параметра Авто служба SQL Server Browser запускается автоматически при каждом запуске Microsoft Windows.
  • 4. Нажмите кнопку Пуск, затем нажмите кнопку OK.

c. Создание исключений в брандмауэре Windows

SQL Server 2005 использует идентификатор экземпляра в качестве части пути установки файлов программы. Для создания исключения для всех экземпляров SQL Server необходимо определить верные идентификаторы экземпляров. Для получения идентификатора экземпляра выполните следующие действия.

  • 1. Нажмите кнопку Пуск, выберите Программы, Microsoft SQL Server 2005, перейдите к пункту Средства настройки, затем выберите Диспетчер конфигурации SQL Server.
  • 2. На правой панели диспетчера конфигурации SQL Server щелкните службу средства просмотра SQL Server, в главном окне правой кнопкой мыши щелкните название экземпляра, затем щелкните Свойства.
  • 3. На странице SQL Server Browser Properties (Свойства SQL Server Browser) щелкните вкладку Дополнительно, в списке свойств выберите идентификатор экземпляра, затем нажмите кнопку OK.

Для открытия брандмауэра Windows выберите в меню Пуск пункт Выполнить, введите команду firewall.cpl и нажмите кнопку ОК.

Создание исключения для SQL Server 2005 в брандмауэре Windows

Для создания исключения для SQL Server 2005 в брандмауэре Windows выполните следующие действия.

  • 1. В брандмауэре Windows щелкните вкладку Исключения, затем щелкните Добавить программу.
  • 2. В окне добавления программы нажмите кнопку Обзор.
  • 3. Щелкните исполняемую программу C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe, щелкните Открыть, затем нажмите кнопку OK.

Примечание. В зависимости от места установки SQL Server 2005 путь может отличаться. MSSQL.1 — это идентификатор экземпляра, полученный на этапе 3 предыдущей процедуры.

Создание исключения для службы SQL Server Browser в брандмауэре Windows

Для создания исключения для службы SQL Server Browser в брандмауэре Windows выполните следующие действия.

  • 1. В брандмауэре Windows щелкните вкладку Исключения, затем щелкните Добавить программу.
  • 2. В окне добавления программы нажмите кнопку Обзор.
  • 3. Щелкните исполняемую программу C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe, щелкните Открыть, затем нажмите кнопку OK.

Примечание. В зависимости от места установки SQL Server 2005 путь может отличаться.

Лезем на сервер и смотрим имя экземпляра сервера бд, к которому требуется удаленное подключение.
Делаем это в SQL Server Cofiguration Manager.
Смотрим список служб - SQL Server (MSSQLSERVER). В моем случае это MSSQLSERVER.

Далее с нашей машины пытаемся подключиться к серверу при помощи sqlcmd (утилиты для работы с сервером из командной строки, аналог mysql). Подробно читаем тут - http://msdn.microsoft.com/ru-ru/library/ms165724%28v=sql.90%29.aspx или вызываем sqlcmd /? для справки.
sqlcmd -S tcp:xx.x.xx.xxx\MSSQLSERVER

В ответ:
Login failed for user ''. The user is not associated with a trusted SQL Server connection.

Оно и понятно - доступ закрыт. На сервере используется авторизация Windows (учетные записи ос).
Мы хотим авторизацию сервера бд. Придется создать пользователя и добавить его к конкретной базе.
А также задать ему роль (у меня db_datareader, читатель).

1. Создание имени входа SQL Server с использованием проверки подлинности SQL Server (среда SQL Server Management Studio)

Подробно - http://msdn.microsoft.com/ru-ru/library/aa337562%28v=SQL.90%29.aspx

2. Создание пользователя базы данных в среде SQL Server Management Studio

Подробно - http://msdn.microsoft.com/ru-ru/library/aa337545%28v=SQL.105%29.aspx

Ну и задаем ему необходимые права в свойствах.

Теперь когда у нас открыт доступ на сервере и есть учетная запись, можно пробовать подключиться с sqlcmd:

sqlcmd -S tcp:xx.x.xx.xxx\MSSQLSERVER -U my_user -P my_pwd
1> SELECT name FROM sys.databases
2> GO
name

---------------------------------
my_db

Мы на сервере. Все ок.

Теперь для php-скрипт из пред поста меняем данные подключения:

$serverName = "xx.x.xx.xxx\MSSQLSERVER";
$connectionInfo = array (
    'Database' => 'my_db',
    'UID'  => 'my_user',
    'PWD'  => 'my_pwd'
);

Комментариев нет:

Отправить комментарий