Bagikan melalui


Memecahkan masalah Pengguna Tanpa Sumber (SQL Server)

Untuk masuk ke instans Microsoft SQL Server, prinsipal harus memiliki login SQL Server yang valid. Login ini digunakan dalam proses autentikasi yang memverifikasi apakah prinsipal diizinkan untuk terhubung ke instans SQL Server. Login SQL Server pada instans server terlihat dalam tampilan katalog sys.server_principals dan tampilan kompatibilitas sys.syslogins.

SQL Server login mengakses database individual menggunakan pengguna database yang dipetakan ke login SQL Server. Ada dua pengecualian untuk aturan ini:

  • Akun tamu.

    Ini adalah akun yang, ketika diaktifkan dalam database, memungkinkan SQL Server masuk yang tidak dipetakan ke pengguna database untuk memasukkan database sebagai pengguna tamu.

  • Keanggotaan grup Microsoft Windows.

    Login SQL Server yang dibuat dari pengguna Windows dapat memasukkan database jika pengguna Windows adalah anggota grup Windows yang juga merupakan pengguna dalam database.

Informasi tentang pemetaan SQL Server masuk ke pengguna database disimpan dalam database. Ini termasuk nama pengguna database dan SID login SQL Server yang sesuai. Izin pengguna database ini digunakan untuk otorisasi dalam database.

Pengguna database yang login SQL Server terkait tidak terdefinisi atau salah ditentukan pada instans server tidak dapat masuk ke instans. Pengguna seperti itu dikatakan sebagai pengguna tanpa sumber dari database pada instans server tersebut. Pengguna database dapat menjadi yatim piatu jika SQL Server login yang sesuai dihilangkan. Selain itu, pengguna database dapat menjadi tanpa sumber setelah database dipulihkan atau dilampirkan ke instans SQL Server yang berbeda. Orphaning dapat terjadi jika pengguna database dipetakan ke SID yang tidak ada di instans server baru.

Catatan

Login SQL Server tidak dapat mengakses database di mana tidak memiliki pengguna database yang sesuai kecuali tamu diaktifkan dalam database tersebut. Untuk informasi tentang membuat akun pengguna database, lihat CREATE USER (Transact-SQL).

Untuk mendeteksi pengguna tanpa sumber

Untuk mendeteksi pengguna tanpa sumber, jalankan pernyataan Transact-SQL berikut:

USE <database_name>;  
GO;   
sp_change_users_login @Action='Report';  
GO;  

Output mencantumkan pengguna dan pengidentifikasi keamanan (SID) yang sesuai dalam database saat ini yang tidak ditautkan ke login SQL Server apa pun. Untuk informasi selengkapnya, lihat sp_change_users_login (Transact-SQL).

Catatan

sp_change_users_login tidak dapat digunakan dengan login SQL Server yang dibuat dari Windows.

Untuk Mengatasi Pengguna Tanpa Sumber

Untuk mengatasi pengguna tanpa sumber, gunakan prosedur berikut:

  1. Perintah berikut menautkan ulang akun masuk server yang ditentukan oleh <login_name> dengan pengguna database yang ditentukan oleh <database_user>.

    USE <database_name>;  
    GO  
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>';  
    GO  
    
    

    Untuk informasi selengkapnya, lihat sp_change_users_login (Transact-SQL).

  2. Setelah Anda menjalankan kode di langkah sebelumnya, pengguna dapat mengakses database. Pengguna kemudian dapat mengubah kata sandi <akun masuk login_name> dengan menggunakan prosedur tersimpan sp_password , sebagai berikut:

    USE master   
    GO  
    sp_password @old=NULL, @new='password', @loginame='<login_name>';  
    GO  
    

    Penting

    Hanya login dengan izin UBAH LOGIN APA PUN yang dapat mengubah kata sandi login pengguna lain. Namun, hanya anggota peran sysadmin yang dapat memodifikasi kata sandi anggota peran sysadmin .

    Catatan

    sp_password tidak dapat digunakan untuk akun Microsoft Windows. Pengguna yang terhubung ke instans SQL Server melalui akun jaringan Windows mereka diautentikasi oleh Windows; oleh karena itu, kata sandi mereka hanya dapat diubah di Windows.

    Untuk informasi selengkapnya, lihat sp_password (Transact-SQL).

Lihat juga

CREATE USER (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)