以前、PowerShellでAzureSQLにSQL認証でアクセスする仕方を記載しましたが今回はMicrosoft Entra認証というものでアクセスしてみようと思います。今回の実行した環境は以下です
Version | |
OS | Windows 11 Pro |
PowerShell | 7.4.1 |
-
AzureSQLにPowerShellでアクセスする(SQL認証版) - ナストンのまとめ
PowerShellでSQLの操作をしたことがなかったので、ついでにとAzureSQLに対してやってみようと思います。今 ...
続きを読む
Azコマンドをインストールする
本記事ではAzコマンドを使用するため予め以下コマンドでインストールしておく必要があります
Install-Module -Name Az -Repository PSGallery -Force
Microsoft.Data.SqlClientを用意
標準の【System.Data.SqlClient.SqlConnection】ではなく本記事では【Microsoft.Data.SqlClient.SqlConnection】を使用します。標準の【System.Data.SqlClient.SqlConnection】だと『Authentication』がSQLConnection文字列に設定できないためです。PowerShellで使用できるようにする方法は以下のサイトが参考になりました
-
PowerShell (7.0.2) で Microsoft.Data.SqlClient 2.0 を使用する at SE の雑記
SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿
続きを読む
対象DBにユーザー登録をする
対象DBに対してログインする際に使用するユーザーを登録する必要らしいので登録します
【db_datawriter 】と【db_datareader 】の権限だけも問題ないようです
CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [user@domain];
ALTER ROLE db_datawriter ADD MEMBER [user@domain];
ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
GO
ユーザー認証でSQLにアクセスする
『Connect-AzAccount』を使用してAzureに接続します。その際に使用したユーザー情報を用いてSQLにアクセスします
$serverName = "<対象サーバー名>.database.windows.net"
$databaseName = "<対象DB名>"
# Azureに接続します
Connect-AzAccount | Out-Null
# SqlConnectionオブジェクトを作成します
$connectionString = "Server=tcp:$serverName,1433;Initial Catalog=$databaseName;Encrypt=True;TrustServerCertificate=False;Connection Timeout=60;Authentication=`"Active Directory Default`""
$connection = New-Object Microsoft.Data.SqlClient.SqlConnection($connectionString)
# データベースに接続します
$connection.Open()
トークンを用いてSQLにアクセスする
『Connect-AzAccount』を使用してAzureに接続します。その際に使用したユーザー情報からSQLサーバーに対するアクセストークンを取得し、SQLにアクセスします
$serverName = "<対象サーバー名>.database.windows.net"
$databaseName = "<対象DB名>"
# Azureに接続します
Connect-AzAccount | Out-Null
# AAD認証トークンを取得します(ResourceUrlの値は固定)
$token = (Get-AzAccessToken -ResourceUrl "https://database.windows.net/").Token
# SqlConnectionオブジェクトを作成します
$connectionString = "Server=tcp:$serverName,1433;Initial Catalog=$databaseName;Encrypt=True;TrustServerCertificate=False;Connection Timeout=60;"
$connection = New-Object Microsoft.Data.SqlClient.SqlConnection($connectionString)
# データベースに接続します
$connection.AccessToken = $token
$connection.Open()
実際にデータにアクセスする
前回の記事同様にSQLに接続した以降は違いはありません
$tableName = "dbo.<対象テーブル名>"
# SQLクエリを実行します
$command = $connection.CreateCommand()
$command.CommandText = "SELECT * FROM $tableName"
$result = $command.ExecuteReader()
# 結果を表示します
$table = new-object "System.Data.DataTable"
$table.Load($result)
$table
# 接続を閉じます
$connection.Close()
# Azureから切断します
Disconnect-AzAccount -Confirm:$false | Out-Null
会社紹介
私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています
会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造
この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています
ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します
-
アドバンスド・ソリューション株式会社
アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...
サイトへ移動
-
お問い合わせ | アドバンスド・ソリューション株式会社
お問い合わせはこちら