Esta é provavelmente uma questão de delegação. Embora o cliente seja autenticado com seu servidor IIS usando suas credenciais de domínio, não será confiável para a delegação acessar os recursos de rede.
Estamos executando um aplicativo PHP 5.4 no Server 2008 R2. Gostaríamos de nos conectar a um banco de dados do SQL Server 2008, em um servidor separado, usando a autenticação do Windows (deve ser a autenticação do Windows - os administradores do banco de dados não nos permitirão conectar de nenhuma outra maneira). Eu fiz o download dos drivers do SQL Server para o PHP e os instalei. O IIS está configurado para autenticação do Windows e a autenticação anônima foi desativada. $ _SERVER ['AUTH_USER'] informa a nossa conta do Windows atualmente conectada. No php.ini, definimos fastcgi.impersonate = 1.
Quando configuramos uma conexão usando o seguinte código da Microsoft:
$serverName = "sqlserver\sqlserver";
$connectionInfo = array( "Database"=>"some_db");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
Recebemos a seguinte mensagem de erro:
Unable to connect.
Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. [message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. )
É possível se conectar ao SQL Server 2008 via PHP usando a autenticação do Windows? Há alguma configuração adicional necessária que precisamos fazer no IIS, no SQL Server ou em qualquer outro componente (como um controlador de domínio)?
Algumas maneiras de eliminar isso, mas basicamente o truque é fazer com que o processo PHP seja executado no contexto certo.
Se você já estiver executando como NETWORK SERVICE, poderá obter a conta da máquina adicionada ao servidor de banco de dados; o nome de usuário é DOMAIN \ COMPUTERNAME $.
Você também pode configurar o pool de aplicativos para usar um usuário nomeado diferente, se isso for mais fácil.
Configurar o PHP para representar provavelmente não ajudará aqui, a menos que o requisito seja fazer com que os usuários passem por autenticação no banco de dados.