Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft Entra ID , SQL Server kimlik doğrulamasına alternatif olarak çalışan merkezi bir kullanıcı kimliği yönetim teknolojisidir. Microsoft Entra ID, kullanıcı adı ve parola, Windows Tümleşik Kimlik Doğrulaması veya Microsoft Entra erişim belirteci kullanarak Microsoft Entra ID'de federe kimliklerle Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Azure Synapse Analytics bağlantılarına olanak tanır. SQL Server'ın PHP sürücüleri bu özellikler için kısmi destek sunar.
Microsoft Entra kimlik doğrulamayı kullanabilmeniz için önce Azure SQL ile Microsoft Entra kimlik doğrulamayı yapılandırmanız ve yönetmeniz gerekir.
Microsoft Entra Id'yi kullanmak için, aşağıdaki tabloda gösterildiği gibi Authentication veya AccessToken anahtar sözcüklerini kullanın (bunlar birbirini dışlar). Daha fazla teknik ayrıntı için bkz. ODBC Sürücüsü ile Microsoft Entra Id kullanma.
| Keyword | Değerler | Description |
|---|---|---|
| AccessToken | Ayarlanmadı (varsayılan) | Diğer anahtar sözcükler tarafından belirlenen kimlik doğrulama modu. Daha fazla bilgi için bkz. Bağlantı Seçenekleri. |
| Bayt dizesi | OAuth JSON yanıtından ayıklanan Microsoft Entra erişim belirteci. Bağlantı dizesi kullanıcı kimliği, parola veya anahtar sözcük içermemelidir (Linux veya Authentication macOS'ta ODBC Sürücüsü sürüm 17 veya üzerini gerektirir). |
|
| Kimlik Doğrulaması | Ayarlanmadı (varsayılan) | Diğer anahtar sözcükler tarafından belirlenen kimlik doğrulama modu. Daha fazla bilgi için bkz. Bağlantı Seçenekleri. |
SqlPassword |
Kullanıcı adı ve parola kullanarak bir SQL Server örneğinde (Azure örneği olabilir) doğrudan kimlik doğrulaması. Kullanıcı adı ve parola , UID ve PWD anahtar sözcükleri kullanılarak bağlantı dizesine geçirilmelidir. | |
ActiveDirectoryPassword [KULLANIM DIŞI] |
ActiveDirectoryPassword kullanım dışı bırakıldı. Daha fazla bilgi için bkz . Örnek - SqlPassword ve ActiveDirectoryPassword kullanarak bağlanma. Kullanıcı adı ve parola kullanarak Microsoft Entra kimliğiyle kimlik doğrulaması. Kullanıcı adı ve parola , UID ve PWD anahtar sözcükleri kullanılarak bağlantı dizesine geçirilmelidir. |
|
ActiveDirectoryMsi |
Microsoft Entra tarafından atanan sistem veya kullanıcı tarafından atanan yönetilen kimlik kullanarak kimlik doğrulaması yapın (ODBC Sürücüsü sürüm 17.3.1.1 veya üzeri gerektirir). Azure kaynakları için yönetilen kimlikler nelerdir? hakkında genel bakış ve öğreticiler için bkz. | |
ActiveDirectoryServicePrincipal |
Hizmet sorumlusu nesnelerini kullanarak kimlik doğrulaması yapma (ODBC Sürücüsü sürüm 17.7 veya üzeri gerektirir). Diğer ayrıntılar ve örnekler için Microsoft Entra ID'de uygulama ve hizmet temel nesnelerine başvurun. |
Kimlik doğrulaması anahtar sözcüğü, bağlantı güvenlik ayarlarını etkiler. Bağlantı dizesinde ayarlanırsa, Şifreleme anahtar sözcüğü varsayılan olarak true olarak ayarlanır ve bu da istemcinin şifreleme isteğinde bulunacağı anlamına gelir. Ayrıca, TrustServerCertificate true (varsayılan olarak false ) olarak ayarlanmadığı sürece, şifreleme ayarından bağımsız olarak sunucu sertifikası doğrulanır. Bu özellik, sunucu sertifikasının yalnızca bağlantı dizesinde özellikle şifreleme istendiğinde doğrulandığı eski, daha az güvenli oturum açma yönteminden farklıdır.
Sınırlamalar
Windows'da, temel odbc sürücüsü Authentication anahtar sözcüğü activeDirectoryIntegrated için bir değer daha destekler, ancak PHP sürücüleri bu değeri herhangi bir platformda desteklemez.
Örnek - SqlPassword ve ActiveDirectoryPassword kullanarak bağlanma
Uyarı
ActiveDirectoryPassword kimlik doğrulama seçeneği (Microsoft Entra ID Parola kimlik doğrulaması) kullanım dışıdır.
Microsoft Entra Id parolası, OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri (ROPC) iznini temel alır. Bu, bir uygulamanın parolasını doğrudan işleyerek kullanıcıda oturum açmasına olanak tanır.
Microsoft, ROPC akışını kullanmamanızı önerir; çok faktörlü kimlik doğrulaması (MFA) ile uyumsuz. Çoğu senaryoda daha güvenli alternatifler kullanılabilir ve önerilir. Bu akış, uygulamaya yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca daha güvenli akışlar uygun olmadığında kullanmalısınız. Microsoft, kullanıcıları kötü amaçlı saldırılardan korumak için bu yüksek riskli kimlik doğrulama akışından uzaklaşıyor. Daha fazla bilgi için bkz. Azure için zorunlu çok faktörlü kimlik doğrulamasını planlama.
Kullanıcı bağlamı kullanılabilir olduğunda ActiveDirectoryInteractive kimlik doğrulamayı kullanın.
Kullanıcı bağlamı kullanılamadığında ve uygulamanız Azure altyapısında çalışıyorsa ActiveDirectoryMSI (veya bazı sürücülerde ActiveDirectoryManagedIdentity) kullanın. Yönetilen Kimlik, sırları ve sertifikaları koruma ve döndürme yükünü ortadan kaldırır. Yönetilen Kimlik'i kullanamıyorsanız ActiveDirectoryServicePrincipal kimlik doğrulamayı kullanın.
Uyarı
Kullanıcı bağlamı kullanılabilir olduğunda Hizmet Sorumlusu kimlik doğrulamayı kullanmayın. Yalnızca uygulama üzerinden erişim doğası gereği yüksek ayrıcalıklıdır. Genellikle kiracı genelinde erişim sağlayarak kötü niyetli bir kişinin herhangi bir kullanıcının müşteri verilerine erişmesine imkan tanıyabilir.
<?php
// First connect to a local SQL Server instance by setting Authentication to SqlPassword
$serverName = "myserver.mydomain";
$connectionInfo = array("UID"=>$myusername, "PWD"=>$mypassword, "Authentication"=>'SqlPassword');
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect with Authentication=SqlPassword.\n";
print_r(sqlsrv_errors());
} else {
echo "Connected successfully with Authentication=SqlPassword.\n";
sqlsrv_close($conn);
}
// Now connect to an Azure SQL database by setting Authentication to ActiveDirectoryPassword
$azureServer = "myazureserver.database.windows.net";
$azureDatabase = "myazuredatabase";
$azureUsername = "myuid";
$azurePassword = "<password>";
$connectionInfo = array("Database"=>$azureDatabase,
"UID"=>$azureUsername,
"PWD"=>$azurePassword,
"Authentication"=>'ActiveDirectoryPassword');
$conn = sqlsrv_connect($azureServer, $connectionInfo);
if ($conn === false) {
echo "Could not connect with Authentication=ActiveDirectoryPassword.\n";
print_r(sqlsrv_errors());
} else {
echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n";
sqlsrv_close($conn);
}
?>
Örnek - PDO_SQLSRV sürücüsünü kullanarak bağlanma
<?php
// First connect to a local SQL Server instance by setting Authentication to SqlPassword
$serverName = "myserver.mydomain";
$connectionInfo = "Database = $databaseName; Authentication = SqlPassword;";
try {
$conn = new PDO("sqlsrv:server = $serverName ; $connectionInfo", $myusername, $mypassword);
echo "Connected successfully with Authentication=SqlPassword.\n";
$conn = null;
} catch (PDOException $e) {
echo "Could not connect with Authentication=SqlPassword.\n";
print_r($e->getMessage());
echo "\n";
}
// Now connect to an Azure SQL database by setting Authentication to ActiveDirectoryPassword
$azureServer = "myazureserver.database.windows.net";
$azureDatabase = "myazuredatabase";
$azureUsername = "myuid";
$azurePassword = "<password>";
$connectionInfo = "Database = $azureDatabase; Authentication = ActiveDirectoryPassword;";
try {
$conn = new PDO("sqlsrv:server = $azureServer ; $connectionInfo", $azureUsername, $azurePassword);
echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n";
unset($conn);
} catch (PDOException $e) {
echo "Could not connect with Authentication=ActiveDirectoryPassword.\n";
print_r($e->getMessage());
echo "\n";
}
?>
Örnek - Microsoft Entra erişim belirtecini kullanarak bağlanma
SQLSRV sürücüsü
<?php
// Using an access token to connect: do not use UID or PWD connection options
// Assume $accToken is the valid byte string extracted from an OAuth JSON response
$connectionInfo = array("Database"=>$azureAdDatabase, "AccessToken"=>$accToken);
$conn = sqlsrv_connect($azureAdServer, $connectionInfo);
if ($conn === false) {
echo "Could not connect with Azure AD Access Token.\n";
print_r(sqlsrv_errors());
} else {
echo "Connected successfully with Azure AD Access Token.\n";
sqlsrv_close($conn);
}
?>
PDO_SQLSRV sürücüsü
<?php
try {
// Using an access token to connect: do not pass in $uid or $pwd
// Assume $accToken is the valid byte string extracted from an OAuth JSON response
$connectionInfo = "Database = $azureAdDatabase; AccessToken = $accToken;";
$conn = new PDO("sqlsrv:server = $azureAdServer; $connectionInfo");
echo "Connected successfully with Azure AD Access Token\n";
unset($conn);
} catch (PDOException $e) {
echo "Could not connect with Azure AD Access Token.\n";
print_r($e->getMessage());
echo "\n";
}
?>
Örnek - Azure kaynakları için yönetilen kimlikleri kullanarak bağlanma
SQLSRV sürücüsüyle sistem tarafından atanan yönetilen kimliği kullanma
Sistem tarafından atanan yönetilen kimliği kullanarak bağlanırken UID veya PWD seçeneklerini kullanmayın.
<?php
$azureServer = 'myazureserver.database.windows.net';
$azureDatabase = 'myazuredatabase';
$connectionInfo = array('Database'=>$azureDatabase,
'Authentication'=>'ActiveDirectoryMsi');
$conn = sqlsrv_connect($azureServer, $connectionInfo);
if ($conn === false) {
echo "Could not connect with Authentication=ActiveDirectoryMsi (system-assigned).\n";
print_r(sqlsrv_errors());
} else {
echo "Connected successfully with Authentication=ActiveDirectoryMsi (system-assigned).\n";
$tsql = "SELECT @@Version AS SQL_VERSION";
$stmt = sqlsrv_query($conn, $tsql);
if ($stmt === false) {
echo "Failed to run the simple query (system-assigned).\n";
print_r(sqlsrv_errors());
} else {
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row['SQL_VERSION'] . PHP_EOL;
}
sqlsrv_free_stmt($stmt);
}
sqlsrv_close($conn);
}
?>
Örnek - Microsoft Entra hizmet sorumlusunu kullanarak bağlanma
Hizmet sorumlusu nesnesi kullanarak kimlik doğrulaması yapmak için ilgili uygulama istemci kimliğine ve istemci gizli dizisine ihtiyacınız olacaktır.
SQLSRV sürücüsü
<?php
$adServer = 'myazureserver.database.windows.net';
$adDatabase = 'myazuredatabase';
$adSPClientId = 'myAppClientId';
$adSPClientSecret = 'myClientSecret';
$conn = false;
$connectionInfo = array("Database"=>$adDatabase,
"Authentication"=>"ActiveDirectoryServicePrincipal",
"UID"=>$adSPClientId,
"PWD"=>$adSPClientSecret);
$conn = sqlsrv_connect($adServer, $connectionInfo);
if ($conn === false) {
echo "Could not connect using Azure AD Service Principal." . PHP_EOL;
print_r(sqlsrv_errors());
}
sqlsrv_close($conn);
?>
PDO_SQLSRV sürücüsü
<?php
$adServer = 'myazureserver.database.windows.net';
$adDatabase = 'myazuredatabase';
$adSPClientId = 'myAppClientId';
$adSPClientSecret = 'myClientSecret';
$conn = false;
try {
$connectionInfo = "Database = $adDatabase; Authentication = ActiveDirectoryServicePrincipal;";
$conn = new PDO("sqlsrv:server = $adServer; $connectionInfo", $adSPClientId, $adSPClientSecret);
} catch (PDOException $e) {
echo "Could not connect using Azure AD Service Principal.\n";
print_r($e->getMessage());
echo PHP_EOL;
}
unset($conn);
?>