在 PowerShell 中管理對 SQL Server 的驗證

根據預設,SQL Server PowerShell 元件在連接到 Database Engine 實例時會使用 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。

權限

您可以在 Database Engine 實例中執行的所有動作,都是由授與用來連線到實例之驗證認證的許可權所控制。 根據預設,SQL Server 提供者和 Cmdlet 會使用執行中的 Windows 帳戶來建立 Database Engine 的 Windows 驗證連線。

若要建立 SQL Server 驗證連線,您必須提供 SQL Server 驗證登入識別碼和密碼。 使用 SQL Server 提供者時,您必須將 SQL Server 登入認證與虛擬磁碟驅動器產生關聯,然後使用變更目錄命令 (cd) 連線到該磁碟驅動器。 在 Windows PowerShell 中,安全性認證只能與虛擬磁碟驅動器相關聯。

使用虛擬磁碟驅動器的 SQL Server 驗證

若要建立與 SQL Server 驗證登入相關聯的虛擬磁碟驅動器。

  1. 建立可:

    1. 具有名稱的參數,以提供虛擬磁碟驅動器、登入標識碼,以及要與虛擬磁碟驅動器建立關聯的提供者路徑。

    2. 使用 讀取主機 提示使用者輸入密碼。

    3. 使用 new-object 建立認證物件。

    4. 使用 new-psdrive 建立具有所提供認證的虛擬磁碟驅動器。

  2. 叫用 函式,以使用提供的認證來建立虛擬磁碟驅動器。

範例:虛擬磁碟驅動器

此範例會建立名為 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 invokes the supplied authentication credentials.
sl SQLAuth:

使用 Invoke-Sqlcmd 的 SQL Server 驗證

若要搭配 SQL Server 驗證使用 Invoke-Sqlcmd。

  1. 使用 -Username 參數來指定登入標識符,並使用 -Password 參數來指定相關聯的密碼。

範例 (Invoke-Sqlcmd)

此範例會使用讀取主機 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