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
Important
ActiveDirectoryPassword kimlik doğrulama seçeneği (parola kimlik doğrulaması Microsoft Entra ID) Microsoft SQL sürücülerinde kullanım dışıdır. Bu yüksek riskli kimlik doğrulama akışı zorunlu Microsoft Entra çok faktörlü kimlik doğrulaması (MFA) ile uyumsuzdur ve MFA'nın zorlandığı kiracılarda çalışmayabilir. Farklı bir Microsoft Entra kimlik doğrulama yöntemine geçmeyi planlayın.
Microsoft Entra ID parola kimlik doğrulaması, OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri (ROPC) iznini temel alır ve bu da bir uygulamanın parolasını doğrudan işleyerek kullanıcıda oturum açmasına olanak tanır.
Microsoft, MFA ile uyumsuz olduğundan ROPC akışını kullanmamanızı önerir. Ç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 kullanın. 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.
Oturum açma sırasında bir kullanıcı mevcutsa, denetim izinin oturum açan kullanıcıya atfedilmesi ve Koşullu Erişim ilkelerinin uygulanması için ActiveDirectoryInteractive veya ActiveDirectoryIntegrated kimlik doğrulamasını kullanın.
Katılımsız hizmetten hizmete senaryoları için Microsoft Entra hizmet hesabı kılavuzunu izleyin:
- Uygulamanız Azure altyapıda çalışıyorsa ActiveDirectoryMSI (veya bazı sürücülerde ActiveDirectoryManagedIdentity) kullanın. Yönetilen kimlikler, gizli anahtarların ve sertifikaların yönetimi ile yenilenmesinden kaynaklanan ek yükü ortadan kaldırır.
- Yönetilen kimlik kullanılamıyorsa (örneğin, uygulama Azure dışında çalışır), ActiveDirectoryServicePrincipal kullanın. Sürücü destekliyorsa, istemci parolası yerine istemci sertifikasını tercih edin. Sertifikayla, özel anahtar istemcide kalır ve istemcinin kimliğini doğrulamak için Microsoft Entra yalnızca imzalı bir onay gönderilir. Anahtar donanımda (TPM veya HSM gibi) depolanıyorsa ya da dışarı aktarılamaz olarak işaretlenmişse, istemci gizli anahtarında olduğu gibi dize olarak dışarı kopyalanamaz.
- hizmet hesabı olarak Microsoft Entra kullanıcı hesabı kullanmayın.
<?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);
?>