![](/img/trans.png)
[英]How to make a JDBC connection to MS SQL Server on Azure via Azure Active Directory User
[英]PHP Laravel with MS SQL Azure database connection having Azure Active Directory - Universal with MFA enables
我們有具有 MS SQL 數據庫連接的 Laravel 應用程序。 SQL 數據庫托管在 microsoft azure app 服務上。
要使用 Laravel 將數據庫與 MS SQL 連接,我們已經按照鏈接中給出的說明安裝了 Microsoft SQL Server (Ubuntu) 所需的 PHP 驅動程序。 https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15
按照上面鏈接中的步驟,我們的 Laravel Web APP 與 MS SQL 數據庫的連接工作正常,我們能夠對數據庫執行查詢。
現在客戶端已啟用 Azure Active Directory – Universal with MFA Authentication 來訪問數據庫。 所以我們的數據庫連接現在不起作用。 我們在 .env 文件中有以下代碼來連接 SQL 數據庫。
DB_CONNECTION_sqlsrv=sqlsrv
DB_HOST_sqlsrv=sql-server-host-name
DB_PORT_sqlsrv=1433
DB_DATABASE_sqlsrv=sql-database-name
DB_USERNAME_sqlsrv= sql-database-username
DB_PASSWORD_sqlsrv= sql-database-password
為了驗證數據庫連接,我們正在嘗試從 SSMS(來自窗口的應用程序)連接數據庫,以驗證憑據和連接在那里正常工作。
但是我們的 Laravel 連接在這里不起作用。 那么是否有任何替代方式或任何參數我們必須傳遞來連接具有 Azure Active Directory 的 MS SQL 數據庫,並在 Azure App Server 上啟用了 MFA? 如果沒有啟用身份驗證,數據庫連接對我們來說工作得很好。 任何幫助,將不勝感激。
經過一番研究,我們找到了解決方案。 我們通過擴展可以完成 ActiveDirectoryPassword 身份驗證的默認數據庫連接類來解決它。 代表解決方案,我們遵循以下步驟。
步驟1:
我們在app下創建了一個新文件夾,並將以下核心文件復制過來。
◦ Custom
▪ Database
• Connectors
◦ ConnectionFactory.php
◦ SqlServerConnector.php
這些核心文件可以在 vendor/laravel/framework/src/Illuminate/ 中找到。 這里的目標是擴展基類,然后在數據庫服務提供程序中加載擴展類。 在我們復制了這些文件之后,我們已經編輯了這些文件。
第2步:
轉到您的應用程序 > 自定義 > 數據庫 > 連接器 > ConnectionFactory.php
更改命名空間。
namespace App\Custom\Database\Connectors;
導入原始類,以便我們可以擴展它。
use Illuminate\Database\Connectors\ConnectionFactory as BaseFactory;
class ConnectionFactory extends BaseFactory {
注釋掉原始類並將其替換為新的擴展類。
/*use Illuminate\Database\Connectors\SqlServerConnector;*/ use App\Custom\Database\Connectors\SqlServerConnector;
第 3 步:
然后轉到應用程序 > 自定義 > 數據庫 > 連接器 > SqlServerConnector.php
在這個文件中,我們需要為 getSqlSrvDsn() 方法添加一些額外的屬性。
更新了命名空間。
namespace App\Custom\Database\Connectors;
添加所需的類。
use Illuminate\Database\Connectors\ConnectorInterface; use Illuminate\Database\Connectors\Connector;
通過添加以下屬性更新 getSqlSrvDsn()。
//Added to support ActiveDirectoryPassword
if (isset($config['authentication'])) { $arguments['Authentication'] = $config['authentication']; }
第4步:
將“身份驗證”添加到屬性后,更新 database.php 中的 sqlsrv 連接設置數組。
'authentication' => env('DB_AUTHENTICATION', 'ActiveDirectoryPassword'),
我們將默認設置為 SqlPassword。 為了使用 Active Directory Managed Identities,我們可以在 .env 文件中將其設置為“ActiveDirectoryPassword”
在 config/database.php 添加 'authentication' => 'ActiveDirectoryPassword',並檢查默認連接,如下所示:
//'default' => env('DB_CONNECTION', 'mysql'),
'default' => env('DB_CONNECTION', 'sqlsrv'),
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL_sqlsrv'),
'host' => env('DB_HOST_sqlsrv', 'hostname.dbmssql.com'),
'port' => env('DB_PORT_sqlsrv', '1433'),
'database' => env('DB_DATABASE_sqlsrv', 'sqldb'),
'username' => env('DB_USERNAME_sqlsrv', 'SqlUsername'),
'password' => env('DB_PASSWORD_sqlsrv', 'SqlPassword'),
'authentication' => env('DB_AUTHENTICATION', 'ActiveDirectoryPassword'),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
第 5 步:
接下來,創建一個新的 DatabaseServiceProvider.php 以使用我們的自定義 ConnectionFactory。
php artisan make:provider DatabaseServiceProvider
復制位於以下位置的現有 DatabaseServiceProvider 代碼:
Illuminate\Database\DatabaseServiceProvider
更新 ConnectionFactory 類以獲取我們的自定義 ConnectionnFactory。
/*use Illuminate\Database\Connectors\ConnectionFactory;*/
use App\Custom\Database\Connectors\ConnectionFactory;
在 DatabaseServiceProvider 中添加以下包
use Illuminate\Database\DatabaseManager;
use Illuminate\Database\DatabaseTransactionsManager;
use Illuminate\Support\ServiceProvider;
第 6 步:
最后,在我們的 app/config/app.php 文件中,注釋掉現有的 DatabaseServiceProvider。
/*Illuminate\Database\DatabaseServiceProvider::class,*/
並添加我們新的 DatabaseServiceProvider。
App\Providers\DatabaseServiceProvider::class,
按照上述步驟,連接工作正常並且能夠從 Laravel 8 訪問數據庫。
您可以立即到此位置編輯 vendor\laravel\framework\src\Illuminate\Database\Connectors\SqlServerConnector.php 在 getSqlSrvDsn() 函數中只需添加此代碼
if (isset($config['authentication'])) {
$arguments['Authentication'] = $config['authentication'];
}
之后,您需要通過
'authentication'=>'ActiveDirectoryMsi'
在 config/database.php 的數據庫連接數組中,應該可以正常工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.