在 PowerShell 中管理 SQL Server 的驗證
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)
依預設,連線至資料庫引擎的執行個體時,SQL Server PowerShell 元件會使用 Windows 驗證。 藉由定義 PowerShell 虛擬磁碟機,或指定 Invoke-Sqlcmd 的 -Username 和 -Password 參數,即可使用 SQL Server 驗證。
注意
有兩個 SQL Server PowerShell 模組:SqlServer 和 SQLPS。
SqlServer 模組是要使用的最新 PowerShell 模組。
SQLPS 模組隨附於 SQL Server 安裝 (用於回溯相容性),但不再更新。
SqlServer 模組包含 SQLPS 中 Cmdlet 的更新版本,且加入新的 Cmdlet 以支援 SQL 最新功能。
從 PowerShell 資源庫安裝 SqlServer 模組。
如需詳細資訊,請參閱 SQL Server PowerShell。
權限
您在資料庫引擎的執行個體中可執行的所有動作,都是透過授與驗證認證的權限所控制,而這些驗證認證用來連線至執行個體。 依預設,SQL Server 提供者和 Cmdlet 會使用其執行時所依據的 Windows 帳戶,來建立資料庫引擎的 Windows 驗證連線。
若要進行 SQL Server 驗證連線,您必須提供 SQL Server 驗證登入識別碼和密碼。 使用 SQL Server 提供者時,您必須將 SQL Server 登入認證與虛擬磁碟機產生關聯,然後使用變更目錄命令 (cd) 連線到該磁碟機。 在 Windows PowerShell 中,安全性認證只能與虛擬磁碟機產生關聯。
使用虛擬磁碟機的 SQL Server 驗證
建立與 SQL Server 驗證登入相關聯的虛擬磁碟機
建立的函數:
具有參數可表示提供給虛擬磁碟機的名稱、登入識別碼,以及與虛擬磁碟機相關聯的提供者路徑。
使用 read-host 提示使用者輸入密碼。
使用 new-object 建立認證物件。
使用 new-psdrive 建立具有已提供認證的虛擬磁碟機。
呼叫此函數,以建立具有已提供認證的虛擬磁碟機。
範例 (虛擬磁碟機)
此範例會建立名為 sqldrive 的函數,可讓您用來建立與所指定 SQL Server 驗證登入和執行個體相關聯的虛擬磁碟機。
sqldrive 函數會提示您輸入登入的密碼,並且在您輸入時遮罩密碼。 然後,每當您使用變更目錄命令 (cd) 連線到使用虛擬磁碟機名稱的路徑時,系統就會使用您在建立磁碟機時所提供的 SQL Server 驗證登入認證來執行所有作業。
## Create a function that specifies the login and prompts for the password.
function sqldrive
{
param( [string]$name, [string]$login = "MyLogin", [string]$root = "SQLSERVER:\SQL\MyComputer\MyInstance" )
$pwd = read-host -AsSecureString -Prompt "Password"
$cred = new-object System.Management.Automation.PSCredential -argumentlist $login,$pwd
New-PSDrive $name -PSProvider SqlServer -Root $root -Credential $cred -Scope 1
}
## Use the sqldrive function to create a SQLAuth virtual drive.
sqldrive SQLAuth
## Set-Location to the virtual drive, which invokes the supplied authentication credentials.
sl SQLAuth:
使用 Invoke-Sqlcmd 的 SQL Server 驗證
搭配使用 Invoke-Sqlcmd 與 SQL Server 驗證
- 使用 -Username 參數可指定登入識別碼,而 -Password 參數則可指定相關聯的密碼。
範例 (Invoke-Sqlcmd)
此範例使用 read-host Cmdlet 提示使用者輸入密碼,然後使用 SQL Server 驗證進行連接。
## Prompt the user for their password.
$pwd = read-host -AsSecureString -Prompt "Password"
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance" -Username "MyLogin" -Password $pwd
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應