簡體   English   中英

如何使用具有集成安全性的 Powershell 連接 Azure Paas 數據庫

[英]How to connect Azure Paas Database using Powershell with intergrated security

如何在沒有用戶名和密碼的情況下使用 Powershell 連接到 Azure SQLDatabase(Paas 實例),而是使用 Active Directory。 當我使用invoke-sqlcmd時,我可以使用用戶名和密碼進行連接,如下所示

$Servername = "XXXXXX.database.windows.net"
$params = @{

   Database = $databasename

   ServerInstance = $ServerName

   Username = $UserName

   Password = $password

   'OutputSqlErrors' = $true

   Query = $QueryString

}

Invoke-Sqlcmd  @params

我需要能夠使用 Active Directory 執行此操作。 我已經閱讀了一些關於如何連接活動目錄的文章,只要您在使用 ODBC 連接或其他數據源的連接字符串(C# 的上下文)上指定它。 由於 Powershell 基於 .Net; 這應該是可行的..

    $ConnString = "DRIVER=ODBC Driver 13 for SQL Server;SERVER=xxxxx.database.windows.net;DATABASE=DBName;Trusted_Connection=Yes"
    $Conn = new-object System.Data.Odbc.OdbcConnection($ConnString)
    $conn.open()
    $cmd = new-object System.Data.Odbc.OdbcCommand("select getdate() as X", $Conn)
    $data = new-object System.Data.Odbc.OdbcDataAdapter($cmd)
    $dt = new-object System.Data.DataColumn
    $data.Fill($dt) 
    $Conn.Close()

#`server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;`

嘗試使用 Active Directory 的目的是,在 Paas 中,只有 AD 帳戶可以添加其他 AD 帳戶。 我希望能夠使用方法添加其他帳戶,而不是登錄 Azure 門戶並手動添加 AD 帳戶。

以下示例顯示了如何在沒有彈出對話框的情況下調用 Add-AzureAccount:

$username = "someorgid@orgaccount.com"
$password = "Pa$$w0rd" | ConvertTo-SecureString -AsPlainText -Force

$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password 
Add-AzureAccount -Credential $credential 

您可以使用 Azure AD 帳戶通過 Azure Active Directory 身份驗證登錄 Azure SQL 數據庫(Paas)。 更多信息請參考此鏈接

注意:本地域 AD 用戶不支持此功能。

您可以使用以下腳本通過 Azure AD 身份驗證登錄。

#You admin Azure AD user name
$Username = "shuitest@*****.onmicrosoft.com"
$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()

AAD 不會/無法解析 Curbs 令牌。 為了讓集成身份驗證在您的桌面上工作,您的環境中需要有 ADFS(或類似的)。 這樣您的桌面將根據 AAD 進行身份驗證,重定向到 ADFS,並且您的遏制令牌將被識別。

有關詳細信息,請參閱https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication

這現在在連接字符串而不是用戶和傳遞中對我有用

Authentication=Active Directory Integrated;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;

例如,根據您的查詢,您可能必須使用$cmd.ExecuteScalar()而不是$cmd.ExecuteNonQuery()

$query = 'select @@version'
$cxn = New-Object System.Data.SqlClient.SqlConnection($cxnString)
$cxn.Open()
$cmd = New-Object System.Data.SqlClient.SqlCommand($query, $cxn)
$cmd.CommandTimeout = 120
$cmd.ExecuteScalar()
$cxn.Close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM