M365関連 プログラム 技術

AzureSQLにPowerShellでアクセスする(Microsoft Entra版)

以前、PowerShellでAzureSQLにSQL認証でアクセスする仕方を記載しましたが今回はMicrosoft Entra認証というものでアクセスしてみようと思います。今回の実行した環境は以下です

Version
OSWindows 11 Pro
PowerShell7.4.1
関連記事
AzureSQLにPowerShellでアクセスする(SQL認証版) - ナストンのまとめ
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 の雑記
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

-M365関連, プログラム, 技術
-, ,