2015-03-31 2 views
1

У меня проблема, которую я не могу исправить. Моя задача проста: я хочу подключиться к машине в нашей сети, которая используется IBM Server, и на ней работает SQL.PHP-соединение с MS SQL Server 2012

Моего PHP подключение скрипт выглядит следующим образом:

// Melde alle PHP Fehler 
error_reporting(-1); 
ini_set('display_errors', 1); 
// Server in diesem Format: <computer>\<instance name> oder 
// <server>,<port>, falls nicht der Standardport verwendet wird 

error_reporting(E_ALL); 
$serverName = "SERVERNAME\MSSQLSRV"; 

$connectionInfo = array('Database'=>'hgadb', "UID"=>"USERNAME", "PWD"=>"PASSWORD"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 


if($conn) { 
    "Connection established.<br />"; 
}else { 
    "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

Я использую инструмент управления Microsoft SQL Server, и я создал базу данных с именем «hgadb» для целей тестирования, а также Логин для эту базу данных с именем пользователя hgadbuser и совпадающим паролем.

Кажется, что все настроено, но я получаю ту же ошибку снова и снова:

Array ([0] => Array ([0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Fehler bei der Anmeldung f�r den Benutzer 'USERNAME'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Fehler bei der Anmeldung f�r den Benutzer 'USERNAME'.) [1] => Array ([0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Die von der Anmeldung angeforderte hgadb-Datenbank kann nicht ge�ffnet werden. Fehler bei der Anmeldung. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Die von der Anmeldung angeforderte hgadb-Datenbank kann nicht ge�ffnet werden. Fehler bei der Anmeldung.) [2] => Array ([0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Fehler bei der Anmeldung f�r den Benutzer 'USERNAME'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Fehler bei der Anmeldung f�r den Benutzer 'USERNAME'.) [3] => Array ([0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Die von der Anmeldung angeforderte hgadb-Datenbank kann nicht ge�ffnet werden. Fehler bei der Anmeldung. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Die von der Anmeldung angeforderte hgadb-Datenbank kann nicht ge�ffnet werden. Fehler bei der Anmeldung.)) 

Я знаю, что немецкий - в переводе говорится:

[message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]The from the login requested database: DATABASENAME-Database cannot be opened. Error with login.)) 

Что я упускаю Вот?

обновление

Когда я пытаюсь войти в систему с SSMS над SQL Server Аутентификация Я получаю следующее сообщение об ошибке

=================================== 

Cannot connect to SQL\MSSQLSRV. 

=================================== 

Die Standarddatenbank des Benutzers kann nicht geöffnet werden. Fehler bei der Anmeldung. 
Fehler bei der Anmeldung für den Benutzer 'USERNAME'. (.Net SqlClient Data Provider) 

------------------------------ 
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=4064&LinkId=20476 

------------------------------ 
Server Name: SERVERNAME\MSSQLSRV 
Error Number: 4064 
Severity: 11 
State: 1 
Line Number: 65536 


------------------------------ 
Program Location: 

    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
    at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 
    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) 
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) 
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) 
    at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) 
    at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) 
    at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 
    at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server) 
    at Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser() 

Когда я войти в систему с окнами аутентификацией и изменить базу данных пользователь пытается для подключения к базе данных «master» в базе данных папок (как показано на рисунке ниже), тогда я могу подключиться к этому с SSMS, и мое соединение php не показывает никаких ошибок.

Почему я не могу подключиться к одной из тестовых баз данных?

enter image description here

+0

Отсутствует имя сервера –

+0

Имеет ли ваш пользователь достаточные разрешения на доступ к базе данных? Когда вы подключаетесь к SSMS с этим пользователем, можете ли вы открыть и запросить базу данных? Пожалуйста, проверьте журналы SQL Server и поделитесь с нами СОСТОЯНИЕМ записи об ошибке, связанной с неудачным входом в систему, что помогает понять, что является источником ошибки. – Pred

+0

Имя сервера объявляется и вызывается в функции sqlsrv_connect :) Я поделился своими журналами здесь завтра - чтобы реплицировать ошибку, мне нужно подключиться к SSMS через SQL Server Authentification? Я подключаюсь к Windows Authentification, когда я использую SSMS. –

ответ

0

Проблема решена.

Мне нужно было установить разрешения для базы данных в SSMS для гостевых и общедоступных подключений. Теперь он работает правильно.

+0

, где в SSMS вы установили эти разрешения? В экземпляре или на конкретном db и в какой папке? Безопасность и т. Д.? Благодарю. –

+1

Rightclick your Database -> Свойства -> Разрешения –