Condividi tramite


Gestire l'autenticazione in SQL Server in PowerShell

Per impostazione predefinita, i componenti di SQL Server PowerShell usano l'autenticazione di Windows per connettersi a un'istanza del motore di database. Usare l'autenticazione di SQL Server definendo un'unità virtuale di PowerShell o specificando i parametri -Username e -Password per Invoke-Sqlcmd.

Annotazioni

Sono disponibili due moduli di SQL Server PowerShell. SqlServer e SQLPS.

Il modulo SqlServer è il modulo di PowerShell corrente da usare.

Il modulo SQLPS è incluso nell'installazione di SQL Server (per compatibilità con le versioni precedenti) ma non viene più aggiornato.

Il modulo SqlServer contiene versioni aggiornate dei cmdlet in SQLPS e include nuovi cmdlet per supportare le funzionalità SQL più recenti.

Installare il modulo SqlServer da PowerShell Gallery.

Per altre informazioni, vedere SQL Server PowerShell.

Autorizzazioni

Tutte le azioni che possono essere eseguite in un'istanza del motore di database sono controllate dalle autorizzazioni concesse alle credenziali di autenticazione usate per connettersi all'istanza. Per impostazione predefinita, il provider e i cmdlet di SQL Server usano l'account di Windows in esecuzione per stabilire una connessione con autenticazione di Windows al motore di database.

Per stabilire una connessione di autenticazione di SQL Server, è necessario specificare un ID di accesso e una password per l'autenticazione di SQL Server. Quando si usa il provider SQL Server, è necessario associare le credenziali di accesso di SQL Server a un'unità virtuale e quindi usare il comando change directory (cd) per connettersi a tale unità. In Windows PowerShell le credenziali di sicurezza possono essere associate solo a unità virtuali.

Autenticazione di SQL Server tramite un'unità virtuale

Per creare un'unità virtuale associata a un account di accesso con autenticazione di SQL Server.

  1. Creare una funzione che:

    1. Disponga di parametri per il nome da assegnare all'unità virtuale, l'ID di accesso e il percorso del provider da associare all'unità virtuale.

    2. Usa read-host per richiedere all'utente la password.

    3. Usa new-object per creare un oggetto credenziali.

    4. Usa new-psdrive per creare un'unità virtuale con le credenziali specificate.

  2. Richiamare la funzione per creare un'unità virtuale con le credenziali fornite.

Esempio: Unità virtuale

Questo esempio crea una funzione denominata sqldrive che è possibile usare per creare un'unità virtuale associata all'account di accesso e all'istanza di autenticazione di SQL Server specificati.

La funzione sqldrive richiede di immettere la password per effettuare l'accesso, mascherandola durante la digitazione. Quindi, ogni volta che si usa il comando change directory (cd) per connettersi a un percorso usando il nome dell'unità virtuale, tutte le operazioni vengono eseguite usando le credenziali di accesso di autenticazione di SQL Server fornite al momento della creazione dell'unità.

## 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:

Autenticazione di SQL Server tramite Invoke-Sqlcmd

Per usare Invoke-Sqlcmd con l'autenticazione di SQL Server.

  1. Usare il parametro -Username per specificare un ID di accesso e il parametro -Password per specificare la password associata.

Esempio (Invoke-Sqlcmd)

In questo esempio viene usato il cmdlet read-host per richiedere all'utente una password e quindi connettersi usando l'autenticazione di 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