Autenticação do Windows para o SQL Server via IIS e PHP

3

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)?

    
por Jeff 10.07.2012 / 23:03

2 respostas

1

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.

Este tem uma boa explicação do questão. Veja também aqui

    
por 10.07.2012 / 23:28
1

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.

    
por 10.07.2012 / 23:22