PHP ile SQL Servera bağlanmak için gerekli Microsoft Driver, varsayılan olarak Windows Authenticationı kullanarak SQL Servera bağlanır.
Önemli bir not olarak çoğu durumda bunun anlamı, web sunucunun açmış olduğu kimlik ya da işlem yapan kimlik, sunucuya bağlanmak için kullanılacak kimliktir. Bir son kullanıcı kimliği değildir.
Aşağıdaki noktalara Windows Autjentication ile SQL Servera bağlanmadan önce dikkat etmek gerekmektedir.
- Eğer SQL Server ve Web Server ayrı makinalar ise SQL Server mutlaka uzaktan erişim için ayarlanmış olmalıdır.
- SQL Server’a bağlanacak kimlik ile web sunucunun çalıştığı kimlik eşleşmelidir.
Database ve ConnectionPooling gibi bağlantı özellikleri bağlantı kurma esnasında ayarlanabilir. Tüm desteklenen bağlantı özellikleri için Connection Options'a bakınız.
SQL Server’a Windows Authentication ile bağlanmanın muhtemel nedenleri aşağıdaki gibi olabilir:
- Herhangi bir kimlik doğrulama sırasında, ağ üzerinden aktarılan kullanıcı adları ve parolalar; veritabanı bağlantı dizesine gömülü değildir. Bunun anlamı kötü niyetli kullanıcıların ve saldırganların kimlik bilgilerini, network izleme ya da yapılandırma dosyası içerisindeki bağlantı dizelerini görüntüleyerek ele geçirememelerini sağlar.
- Merkezi bir kimlik yönetimi ile; belirli bir süre sonunda şifrenin geçerliliğini yitirmesi, minimum şifre uzunluğu, birkaç defa hatalı giriş denemesi sonucunda hesap kitlenmesi gibi kullanıcılara güvenlik politikaları uygulanabilir
Eğer Windows Authentication pratik bir seçenek değil ise, SQL Server Authentication ile bağlantı nasıl yapılır? a bakabilirsiniz.
Örnek
SQL Server ve PHP için Microsoft Driver’ın SQLSRV sürücüsünü kullanma, aşağıdaki örnek SQL Server’ın local bir örneğine bağlanmak için Windows Authentication kullanır. Bağlantı gerçekleştirildikten sonra, server database’e erişmeye çalışan kullanıcının giriş bilgilerini sorgular.
Bu örnekte Local bir bilgisayara SQL Server ve AdventureWorks database’i kurulmuş varsayılmaktadır. Örnek çalıştırıldıktan sonra tüm çıktılar browser’a basılır.
< ?php
/* Specify the server and connection string attributes. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.";
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.";
die( print_r( sqlsrv_errors(), true));
}
/* Retrieve and display the results of the query. */
$row = sqlsrv_fetch_array($stmt);
echo "User login: ".$row[0]."";
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
PDO ile Bağlantı
Aşağıdaki örnek ise aynı işlemi gerçekleştirmek için PDO_SQLSRV sürücüsünü kullanır.
< ?php
try {
$conn = new PDO( "sqlsrv:Server=(local);Database=AdventureWorks", NULL, NULL);
$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 );
}
Kaynak: http://msdn.microsoft.com/en-us/library/cc296205%28v=sql.90%29.aspx