web-dev-qa-db-ja.com

AAD認証を使用したINVOKE-SQLCMD

Azure Devopsの「リリースパイプライン」では、SQLServerデータベースを含むAzureリソースをプロビジョニングし、管理対象IDを使用してデータベースへのアクセスを設定してください。

DevOpS Service Principalを確実にした後は、データベースサーバのAAD管理者として定義されているAADグループのメンバーであるため、管理対象のIDユーザーを追加して役割を変更するには、SQLを実行する必要があります。これは、Invoke-Sqlcmdコマンドレットを使用して、Azure PowerShellタスクで試行されます。

Invoke-Sqlcmd 2つの香りがあり、私が使用しなければならず、それが重要なのであれば明らかではありません。これまでのところ、私が試してみたのはAADで認証できませんでした。

AAD認証を使用する意図をInvoke-Sqlcmdに伝えますか?

私は最初のConnect-AzureADに必要ですか?

System.Management.Automation.PSCredentialオブジェクトを渡す必要がある場合は、サービスプリンシパル(Azure DevOpSサービスユーザー)を扱っていることを考えると、ユーザーとパスワードとして使用する必要があります。

7
oli

油が理解されています。

この例のようなものを試してみてください、あなたのニーズを調整するだけです...

$Creds = Get-Credential -Credential '[email protected]'
$Username = $($Creds.GetNetworkCredential().UserName)
$Password = $($Creds.GetNetworkCredential().Password)
$Database = "testg"
$Server = 'test.database.windows.net'
$Port = 1433
$cxnString = "Server=tcp:$Server,$Port;Database=$Database;Authentication=Active Directory Password;UID=$UserName;PWD=$Password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
$query = "select count(*) from dbo.Authors"
$cxn = New-Object System.Data.SqlClient.SqlConnection($cxnString)
$cxn.Open()
$cmd = New-Object System.Data.SqlClient.SqlCommand($query, $cxn)
$cmd.CommandTimeout = 120
$cmd.ExecuteNonQuery()
$cxn.Close()
 _

opの更新

それは単なる選択肢でした。ポップアップを必要としない場合は、安全なファイルを作成して、Windowsクレデンシャルストア内のCRESをそのクレジットまたは保存するか、そこからそれらを引いてください。それでも、あなたはまだそれらを最初に作成する必要があります。

1
postanote

私はInvoke-SQLCmdでこれを行う方法を見つけることができませんでしたが、主にここで説明されている非常に簡単な方法を持っています(例8): https://docs.dbatools.io /#connect-dbainstance

私は今の間これを使用していて、私が知っている限りでは、MFAはまだサポートされていません。

1
Owain Esau