Procedura: Connessione con l'autenticazione di SQL Server

Download del driver PHP

I driver Microsoft per PHP per SQL Server supportano l'autenticazione di SQL Server quando ci si connette a SQL Server.

L'autenticazione di SQL Server deve essere usata solo quando l'autenticazione di Windows non è possibile. Per informazioni sulla connessione con l'autenticazione di Windows, vedere How to: Connect Using Windows Authentication.

Quando si usa l'autenticazione di SQL Server per la connessione a SQL Server è necessario considerare i seguenti punti:

  • Nel server deve essere abilitata l'autenticazione in modalità mista di SQL Server.

  • L'ID utente e la password (gli attributi di connessione UID e PWD nel driver SQLSRV) devono essere impostati quando si tenta di stabilire una connessione. L'ID utente e password devono corrispondere a un utente e a una password di SQL Server validi.

Nota

Le password che contengono una parentesi graffa di chiusura (}) devono essere precedute da una seconda parentesi graffa di chiusura come carattere di escape. Ad esempio, se la password di SQL Server è "pass}word", il valore dell'attributo di connessione PWD deve essere impostato su "pass}}word".

Quando si usa l'autenticazione di SQL Server per la connessione a SQL Server è necessario adottare le precauzioni seguenti:

  • Proteggere (crittografare) le credenziali trasmesse in rete dal server Web al database. Le credenziali vengono crittografate per impostazione predefinita a partire da SQL Server 2005. Per maggiore sicurezza, impostare l'attributo di connessione Encrypt su "on" per crittografare tutti i dati inviati al server.

Nota

Impostare l'attributo di connessione Encrypt su "on" può rallentare le prestazioni poiché la crittografia dei dati può richiedere notevoli risorse di elaborazione.

  • Negli script PHP non includere valori per gli attributi di connessione UID e PWD in testo normale. Questi valori devono essere archiviati in una directory specifica dell'applicazione con autorizzazioni limitate appropriate.

  • Evitare l'uso dell'account sa . Eseguire il mapping dell'applicazione a un utente del database che dispone dei privilegi desiderati e usare una password complessa.

Nota

Quando si stabilisce una connessione è possibile impostare altri attributi di connessione oltre a ID utente e password. Per un elenco completo degli attributi di connessione supportati, vedere Connection Options.

Esempio di SQLSRV

L'esempio seguente usa il driver SQLSRV con l'autenticazione di SQL Server per connettersi a un'istanza locale di SQL Server. I valori per gli attributi di connessione UID e PWD richiesti sono ricavati da file di testo specifici dell'applicazione, uid.txt e pwd.txt, nella directory C:\AppData. Dopo aver stabilito la connessione, viene eseguita una query nel server per verificare l'accesso dell'utente.

Nell'esempio si presuppone che SQL Server e il database AdventureWorks siano installati nel computer locale. Quando l'esempio viene eseguito dal browser, tutto l'output viene scritto nel browser.

<?php  
/* Specify the server and connection string attributes. */  
$serverName = "(local)";  
  
/* Get UID and PWD from application-specific files.  */  
$uid = file_get_contents("C:\AppData\uid.txt");  
$pwd = file_get_contents("C:\AppData\pwd.txt");  
$connectionInfo = array( "UID"=>$uid,  
                         "PWD"=>$pwd,  
                         "Database"=>"AdventureWorks");  
  
/* Connect using SQL Server Authentication. */  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn === false )  
{  
     echo "Unable to connect.</br>";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Query SQL Server for the login of the user accessing the  
database. */  
$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";  
$stmt = sqlsrv_query( $conn, $tsql);  
if( $stmt === false )  
{  
     echo "Error in executing query.</br>";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the results of the query. */  
$row = sqlsrv_fetch_array($stmt);  
echo "User login: ".$row[0]."</br>";  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);  
?>  

Esempio di PDO_SQLSRV

Questo esempio usa il driver PDO_SQLSRV per illustrare la procedura di connessione con l'autenticazione di SQL Server.

<?php  
   $serverName = "(local)";   
   $database = "AdventureWorks";  
  
   // Get UID and PWD from application-specific files.   
   $uid = file_get_contents("C:\AppData\uid.txt");  
   $pwd = file_get_contents("C:\AppData\pwd.txt");  
  
   try {  
      $conn = new PDO( "sqlsrv:server=$serverName;Database = $database", $uid, $pwd);   
      $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   
   }  
  
   catch( PDOException $e ) {  
      die( "Error connecting to SQL Server" );   
   }  
  
   echo "Connected to SQL Server\n";  
  
   $query = 'select * from Person.ContactType';   
   $stmt = $conn->query( $query );   
   while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){   
      print_r( $row );   
   }  
  
   // Free statement and connection resources.   
   $stmt = null;   
   $conn = null;   
?>  

Vedi anche

Procedura: Connessione con l'autenticazione di SQL Server

Guida alla programmazione per i driver Microsoft per PHP per SQL Server

Informazioni sugli esempi di codice nella documentazione

SUSER_SNAME (Transact-SQL)

Procedura: Creare un account di accesso di SQL Server

Procedura: Creare un utente del database

Gestione di utenti, ruoli e account di accesso

Separazione tra schema e utente

GRANT - autorizzazioni per oggetti (Transact-SQL)