概要
接続文字列を使ってnode-mssqlでDBに接続していたところを、マネージドIDを使ってDBに接続に変更する。
なお、PrismaでもマネージドIDを使ってみたかったが、Issueにもあるように2024.09.21時点では使用できない模様。(authenticationの設定がsetupMSSQL.tsにない)
接続までの手順
SQL データベースで Microsoft Entra 認証を有効にする
Azure Function マネージド ID を有効にする
SQL Database へのアクセスをマネージド ID に付与する
node-mssqlの接続設定を作成する
SQL データベースで Microsoft Entra 認証を有効にする
チュートリアル: マネージ ID と SQL バインドを使用して Azure SQL に関数アプリを接続するの手順にまずは従う。
testuser@hogeoutlook.onmicrosoft.com
というプリンシパル名を持つユーザを作成する
hogeoutlookの部分は、「Microsoft Entra ID」を開いた時の下記画面を参照。
infra/bin/add-d-b-user.sh
#!/bin/bash
BIN_DIR=$(cd $(dirname $0) && pwd)
source $BIN_DIR/.env
azureaduser=$(az ad user list --filter "userPrincipalName eq '$DB_ACCESS_USER_MAIL'" --query [].id --output tsv)
if [ -z "$azureaduser" ]; then
az ad user create --display-name $DB_ACCESS_USER_NAME --password $DB_ACCESS_USER_PW --user-principal-name $DB_ACCESS_USER_MAIL
fi
# Microsoft Entra ユーザーへのデータベース アクセスの許可
az sql server ad-admin create --resource-group $DB_RESOURCE_GROUP_NAME --server-name $DB_SERVER_NAME --display-name ADMIN --object-id $azureaduser
環境変数 | 設定値例 |
---|---|
DB_ACCESS_USER_NAME | mogamoga |
DB_ACCESS_USER_PW | mogamogaPassw0rd |
DB_ACCESS_USER_MAIL | mogauser@contosooutlook.onmicrosoft.com |
DB_RESOURCE_GROUP_NAME | myDbResourceGroup |
DB_SERVER_NAME | my-server-name |
Azure Function マネージド ID を有効にする
以前の手順の通り、bicepで設定。
SQL データベースへのアクセスをマネージド ID に付与する
作成したユーザでログインする。
下記SQLを流す
CREATE USER functionsの名前 FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER functionsの名前;
ALTER ROLE db_datawriter ADD MEMBER functionsの名前;
node-mssqlの接続設定を作成する
Node.js と mssql npm パッケージを使用して Azure SQL Database に接続し、クエリを実行するを参考に設定する。
const config = {
server: processEnv.SQLSERVER_NAME,
port: 1433,
database: processEnv.SQLSERVER_DB_NAME,
authentication: {
type: 'azure-active-directory-default',
options: {},
},
options: {
encrypt: true,
},
} as const;
const db = new Database(config);
参考
Node.js と mssql npm パッケージを使用して Azure SQL Database に接続し、クエリを実行する
チュートリアル: マネージ ID と SQL バインドを使用して Azure SQL に関数アプリを接続する
マネージド ID を使用して Azure Functions から Azure SQL Database へ接続する
[Managed Identity を使った SQL Database の認証がとても簡単になった話]
Azure SQL Database との間でパスワードレス接続を使うように Node.js アプリケーションを移行する
node-mssql
tedious
prisma sql ad
sqlにマネージドIDで接続する