Gestire l'autenticazione a SQL Server in PowerShell

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

Per impostazione predefinita, i componenti PowerShell di SQL Server utilizzano l'autenticazione di Windows in caso di connessione a un'istanza del Motore di database. È possibile usare l'autenticazione di SQL Server definendo un'unità virtuale PowerShell o specificando i parametri -Username e -Password per Invoke-Sqlcmd.

Nota

Esistono due moduli SQL Server PowerShell: SqlServer e SQLPS.

SqlServer è il modulo corrente di PowerShell da usare.

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

Il modulo SqlServer contiene le versioni aggiornate dei cmdlet di SQLPS e include nuovi cmdlet per il supporto delle funzionalità SQL più recenti.

Installare il modulo SqlServer da PowerShell Gallery.

Per altre informazioni, vedere SQL Server PowerShell.

Autorizzazioni

Tutte le azioni eseguibili in un'istanza del Motore di database vengono controllate dalle autorizzazioni concesse alle credenziali di autenticazione utilizzate per connettersi all'istanza. Per impostazione predefinita, il provider e i cmdlet di SQL Server utilizzano l'account di Windows in esecuzione per eseguire una connessione con autenticazione di Windows al Motore di database.

Per effettuare una connessione con autenticazione di SQL Server è necessario fornire un ID di accesso per l'autenticazione di SQL Server e una password. Se si usa il provider di SQL Server , è necessario associare le credenziali di accesso di SQL Server a un'unità virtuale e quindi usare il comando di modifica della directory (cd) per stabilire la connessione 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 accesso di 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. Usi read-host per richiedere all'utente la password.

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

    4. Usi new-psdrive per creare un'unità virtuale con le credenziali fornite.

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

Esempio (unità virtuale)

In questo esempio viene creata una funzione denominata sqldrive che può essere utilizzata per creare un'unità virtuale associata all'account di accesso con autenticazione di SQL Server e all'istanza specificati.

La funzione sqldrive richiede di immettere la password per effettuare l'accesso, mascherandola durante la digitazione. Quando si usa il comando di modifica della directory (cd) per connettersi a un percorso usando il nome di unità virtuale, tutte le operazioni vengono eseguite usando le credenziali di accesso con 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, which invokes the supplied authentication credentials.  
sl SQLAuth:

Autenticazione di SQL Server tramite Invoke-Sqlcmd

Per utilizzare 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 utilizzato l'host della lettura cmdlet per la richiesta di una password all'utente, quindi viene stabilita la connessione tramite 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  

Vedere anche