Compartir a través de


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

De manera predeterminada, los componentes de SQL Server PowerShell usan la autenticación de Windows al conectarse a una instancia del Motor de base de datos. Use 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 obtener más información, visite SQL Server PowerShell.

Permisos

Todas las acciones que se pueden realizar en una instancia del Motor de base de datos se controlan mediante los permisos concedidos a las credenciales de autenticación usadas para conectarse a la instancia. De manera predeterminada, el proveedor y los cmdlets de SQL Server usan la cuenta de Windows de ejecución para establecer una conexión de autenticación de Windows con el 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 una contraseña de autenticación de SQL Server. Al usar el proveedor de SQL Server, debe asociar las credenciales de inicio de sesión de SQL Server a una unidad virtual y, a continuación, usar el comando change directory (cd) para conectarse a esa unidad. 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 a un 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 puede usar para crear una unidad virtual asociada con el inicio de sesión y la instancia de 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. A continuación, siempre que use el comando change directory (cd) para conectarse a una ruta de acceso mediante el nombre de la unidad virtual, todas las operaciones se realizan mediante las credenciales de inicio de sesión de autenticación de SQL Server proporcionadas 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 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 solicitar al usuario una contraseña y, a continuación, se conecta mediante 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