Mengelola autentikasi ke SQL Server di PowerShell

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics Analytics yesPlatform System (PDW)

Secara default, komponen PowerShell SQL Server menggunakan Autentikasi Windows saat menyambungkan ke instans Mesin Database. Anda dapat menggunakan Autentikasi SQL Server dengan menentukan drive virtual PowerShell, atau dengan menentukan parameter -Nama Pengguna dan -Kata Sandi untuk Invoke-Sqlcmd.

Catatan

Ada dua modul PowerShell SQL Server; SqlServer dan SQLPS.

Modul SqlServer adalah modul PowerShell saat ini untuk digunakan.

Modul SQLPS disertakan dengan penginstalan SQL Server (untuk kompatibilitas mundur) tetapi tidak lagi diperbarui.

Modul SqlServer berisi versi cmdlet yang diperbarui di SQLPS dan menyertakan cmdlet baru untuk mendukung fitur SQL terbaru.

Instal modul SqlServer dari Galeri PowerShell.

Untuk informasi selengkapnya, lihat SQL Server PowerShell.

Izin

Semua tindakan yang dapat Anda lakukan dalam instans Mesin Database dikontrol oleh izin yang diberikan ke kredensial autentikasi yang digunakan untuk menyambungkan ke instans. Secara default, penyedia dan cmdlet SQL Server menggunakan akun Windows tempatnya berjalan untuk membuat koneksi Autentikasi Windows ke Mesin Database.

Untuk membuat koneksi Autentikasi SQL Server, Anda harus menyediakan ID login dan kata sandi Autentikasi SQL Server. Saat menggunakan penyedia SQL Server, Anda harus mengaitkan kredensial login SQL Server dengan drive virtual, lalu menggunakan perintah ubah direktori (cd) untuk menyambungkan ke drive tersebut. Di Windows PowerShell, kredensial keamanan hanya dapat dikaitkan dengan drive virtual.

Autentikasi SQL Server Menggunakan Virtual Drive

Untuk membuat drive virtual yang terkait dengan login Autentikasi SQL Server

  1. Buat fungsi yang:

    1. Memiliki parameter untuk nama untuk memberikan drive virtual, ID masuk, dan jalur penyedia untuk dikaitkan dengan drive virtual.

    2. Menggunakan read-host untuk meminta kata sandi kepada pengguna.

    3. Menggunakan objek baru untuk membuat objek kredensial.

    4. Menggunakan new-psdrive untuk membuat drive virtual dengan kredensial yang disediakan.

  2. Panggil fungsi untuk membuat drive virtual dengan kredensial yang disediakan.

Contoh (Virtual Drive)

Contoh ini membuat fungsi bernama sqldrive yang dapat Anda gunakan untuk membuat drive virtual yang terkait dengan login dan instans Autentikasi SQL Server yang ditentukan.

Fungsi sqldrive meminta Anda untuk memasukkan kata sandi untuk masuk Anda, menutupi kata sandi saat Anda mengetikkannya. Kemudian, setiap kali Anda menggunakan perintah ubah direktori (cd) untuk menyambungkan ke jalur dengan menggunakan nama drive virtual, semua operasi dilakukan dengan menggunakan kredensial login Autentikasi SQL Server yang Anda berikan saat membuat drive.

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

Autentikasi SQL Server Menggunakan Invoke-Sqlcmd

Untuk menggunakan Invoke-Sqlcmd dengan Autentikasi SQL Server

  1. Gunakan parameter -Username untuk menentukan ID masuk, dan parameter -Password untuk menentukan kata sandi terkait.

Contoh (Invoke-Sqlcmd)

Contoh ini menggunakan cmdlet read-host untuk meminta kata sandi kepada pengguna, lalu menyambungkan menggunakan Autentikasi 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  

Lihat juga