Administración de la autenticación en SQL Server en PowerShell

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database SíInstancia administrada de Azure SQL síAzure Synapse Analytics síAlmacenamiento de datos paralelos

De forma predeterminada, los componentes PowerShell de SQL Server usan la autenticación de Windows para conectarse a una instancia de Motor de base de datos. Puede usar la autenticación de SQL Server definiendo una unidad virtual de PowerShell o especificando los parámetros -Username y -Password para Invoke-Sqlcmd.

Nota

Hay dos módulos de SQL Server PowerShell: SqlServer y SQLPS.

El módulo SqlServer es el módulo de PowerShell actual que se va a usar.

El módulo SQLPS está incluido en la instalación de SQL Server (por motivos de compatibilidad con versiones anteriores), pero ya no se actualiza.

El módulo SqlServer contiene versiones actualizadas de los cmdlets en SQLPS e incluye cmdlets para admitir las características más recientes de SQL.

Instale el módulo SqlServer desde la Galería de PowerShell.

Para más información, consulte el artículo sobre SQL Server PowerShell.

Permisos

Todas las acciones que se pueden realizar en una instancia de Motor de base de datos se controlan mediante los permisos concedidos a las credenciales de autenticación usadas para conectarse a la instancia. De forma predeterminada, el proveedor y los cmdlets de SQL Server usa la cuenta de Windows de ejecución para establecer una conexión de autenticación de Windows con Motor de base de datos.

Para establecer una conexión de autenticación de SQL Server debe proporcionar un identificador de inicio de sesión y contraseña de autenticación de SQL Server. Al usar el proveedor SQL Server , debe asociar las credenciales de inicio de sesión de SQL Server a una unidad virtual y, después, usar el comando de cambio de directorio (cd) para conectarse a esa unidad de disco. En Windows PowerShell, las credenciales de seguridad solo se pueden asociar con unidades virtuales.

Autenticación de SQL Server mediante una unidad virtual

Para crear una unidad virtual asociada con el inicio de sesión de autenticación de SQL Server

  1. Crear una función que:

    1. Tiene parámetros para que el nombre proporcione la unidad virtual, el identificador de inicio de sesión y la ruta de acceso del proveedor para asociarla a la unidad virtual.

    2. Usa read-host para pedir la contraseña al usuario.

    3. Usa new-object para crear un objeto de credenciales.

    4. Usa new-psdrive para crear una unidad virtual con las credenciales proporcionadas.

  2. Invocar la función para crear una unidad virtual con las credenciales proporcionadas.

Ejemplo (unidad virtual)

En este ejemplo se crea una función denominada sqldrive que se puede usar para crear una unidad virtual asociada a la instancia e inicio de sesión de la autenticación de SQL Server especificados.

La función sqldrive pide que especifique la contraseña para su inicio de sesión, enmascarándola a medida que la escribe. Siempre que use el comando de cambio de directorio (cd) para conectar a una ruta de acceso usando el nombre de la unidad virtual, todas las operaciones se realizan usando las credenciales de inicio de sesión de la autenticación de SQL Server que especificó al crear la unidad.

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

Autenticación de SQL Server mediante Invoke-Sqlcmd

Para usar Invoke-Sqlcmd con la autenticación de SQL Server

  1. Use el parámetro -Username para especificar un identificador de inicio de sesión y el parámetro -Password para especificar la contraseña asociada.

Ejemplo (Invoke-Sqlcmd)

En este ejemplo se usa el cmdlet read-host para pedir al usuario una contraseña, y después se conecta con la autenticación de 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  

Consulte también