Bagikan melalui


sp_addlinkedsrvlogin (T-SQL)

Berlaku untuk: SQL Server

Membuat atau memperbarui pemetaan antara login pada instans lokal SQL Server dan akun keamanan di server jarak jauh.

Konvensi sintaks transact-SQL

Sintaks

sp_addlinkedsrvlogin
    [ @rmtsrvname = ] N'rmtsrvname'
    [ , [ @useself = ] 'useself' ]
    [ , [ @locallogin = ] N'locallogin' ]
    [ , [ @rmtuser = ] N'rmtuser' ]
    [ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]

Argumen

[ @rmtsrvname = ] N'rmtsrvname'

Nama server tertaut tempat pemetaan masuk berlaku. @rmtsrvname adalah sysname, tanpa default.

[ @useself = ] 'useself'

Menentukan apakah akan terhubung ke rmtsrvname dengan meniru login lokal atau secara eksplisit mengirimkan login dan kata sandi. @useself adalah varchar(8), dengan default true.

  • Nilai true menentukan bahwa login menggunakan kredensial mereka sendiri untuk terhubung ke @rmtsrvname, dengan argumen @rmtuser dan @rmtpassword diabaikan.
  • falsemenentukan bahwa argumen @rmtuser dan @rmtpassword digunakan untuk menyambungkan ke @rmtsrvname untuk @locallogin yang ditentukan.

Jika @rmtuser dan @rmtpassword diatur ke NULL, tidak ada login atau kata sandi yang digunakan untuk menyambungkan ke server tertaut.

[ @locallogin = ] N'locallogin'

Login di server lokal. @locallogin adalah sysname, dengan default NULL. NULL menentukan bahwa entri ini berlaku untuk semua login lokal yang tersambung ke @rmtsrvname. Jika tidak NULL, @locallogin bisa menjadi login SQL Server atau akun Windows. Akun Windows harus memiliki akses ke SQL Server secara langsung, atau melalui keanggotaan dalam grup Windows.

[ @rmtuser = ] N'rmtuser'

Login jarak jauh yang digunakan untuk menyambungkan ke @rmtsrvname kapan @useself adalah false. @rmtuser adalah sysname, dengan default NULL. Ketika server jarak jauh adalah instans SQL Server yang tidak menggunakan Autentikasi Windows, @rmtuser adalah login SQL Server.

[ @rmtpassword = ] N'rmtpassword'

Kata sandi yang terkait dengan @rmtuser. @rmtpassword adalah sysname, dengan default NULL.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

Saat pengguna masuk ke server lokal dan menjalankan kueri terdistribusi yang mengakses tabel di server tertaut, server lokal harus masuk ke server tertaut atas nama pengguna untuk mengakses tabel tersebut. Gunakan sp_addlinkedsrvlogin untuk menentukan kredensial yang digunakan server lokal untuk masuk ke server tertaut.

Catatan

Untuk membuat rencana kueri terbaik saat Anda menggunakan tabel di server tertaut, prosesor kueri harus memiliki statistik distribusi data dari server tertaut. Pengguna yang memiliki izin terbatas pada kolom tabel apa pun mungkin tidak memiliki izin yang memadai untuk mendapatkan semua statistik yang berguna, dan mungkin menerima rencana kueri yang kurang efisien dan mengalami performa yang buruk. Jika server tertaut adalah instans SQL Server, untuk mendapatkan semua statistik yang tersedia, pengguna harus memiliki tabel atau menjadi anggota peran server tetap sysadmin , peran database tetap db_owner , atau peran database tetap db_ddladmin di server yang ditautkan. SQL Server 2012 SP1 (11.0.3x) memodifikasi pembatasan izin untuk mendapatkan statistik dan memungkinkan pengguna dengan izin SELECT untuk mengakses statistik yang tersedia melalui DBCC SHOW_STATISTICS. Untuk informasi selengkapnya, lihat bagian Izin SHOW_STATISTICS DBCC.

Pemetaan default antara semua login di server lokal dan login jarak jauh di server tertaut secara otomatis dibuat dengan menjalankan sp_addlinkedserver. Pemetaan default menyatakan bahwa SQL Server menggunakan kredensial pengguna dari login lokal saat menyambungkan ke server tertaut atas nama login. Ini setara dengan menjalankan sp_addlinkedsrvlogin dengan @useself diatur ke true untuk server tertaut, tanpa menentukan nama pengguna lokal. Gunakan sp_addlinkedsrvlogin hanya untuk mengubah pemetaan default atau untuk menambahkan pemetaan baru untuk login lokal tertentu. Untuk menghapus pemetaan default atau pemetaan lainnya, gunakan sp_droplinkedsrvlogin.

Alih-alih harus menggunakan sp_addlinkedsrvlogin untuk membuat pemetaan masuk yang telah ditentukan sebelumnya, SQL Server dapat secara otomatis menggunakan kredensial keamanan Windows (nama login windows dan kata sandi) pengguna yang mengeluarkan kueri untuk menyambungkan ke server tertaut ketika semua kondisi berikut ada:

  • Pengguna tersambung ke SQL Server dengan menggunakan Mode Autentikasi Windows.

  • Delegasi akun keamanan tersedia di klien dan mengirim server.

  • Penyedia mendukung Mode Autentikasi Windows; misalnya, SQL Server yang berjalan di Windows.

Catatan

Delegasi tidak harus diaktifkan untuk skenario lompatan tunggal, tetapi diperlukan untuk skenario multi-hop.

Setelah autentikasi dilakukan oleh server tertaut dengan menggunakan pemetaan yang ditentukan dengan menjalankan sp_addlinkedsrvlogin instans lokal SQL Server, izin pada objek individual dalam database jarak jauh ditentukan oleh server tertaut, bukan server lokal.

sp_addlinkedsrvlogin tidak dapat dijalankan dari dalam transaksi yang ditentukan pengguna.

Izin

Memerlukan izin UBAH LOGIN APA PUN di server.

Contoh

J. Menyambungkan semua login lokal ke server tertaut dengan menggunakan kredensial pengguna mereka sendiri

Contoh berikut membuat pemetaan untuk memastikan bahwa semua login ke server lokal tersambung ke server Accounts tertaut dengan menggunakan kredensial pengguna mereka sendiri.

EXEC sp_addlinkedsrvlogin 'Accounts';

Atau

EXEC sp_addlinkedsrvlogin 'Accounts', 'true';

Catatan

Jika ada pemetaan eksplisit yang dibuat untuk login individual, pemetaan tersebut lebih diutamakan daripada pemetaan global apa pun yang mungkin ada untuk server tertaut tersebut.

B. Menyambungkan login tertentu ke server tertaut dengan menggunakan kredensial pengguna yang berbeda

Contoh berikut membuat pemetaan untuk memastikan bahwa pengguna Domain\Mary Windows tersambung ke server Accounts tertaut dengan menggunakan login MaryP dan kata sandi d89q3w4u.

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';

Perhatian

Contoh ini tidak menggunakan Autentikasi Windows. Kata sandi akan ditransmisikan tidak terenkripsi. Kata sandi mungkin terlihat dalam definisi sumber data dan skrip yang disimpan ke disk, dalam cadangan, dan dalam file log. Jangan pernah menggunakan kata sandi administrator dalam koneksi semacam ini. Konsultasikan dengan administrator jaringan Anda untuk panduan keamanan khusus untuk lingkungan Anda.

C. Memetakan login lokal tertentu ke login server jarak jauh

Dalam beberapa kasus, seperti dengan Azure SQL Managed Instance, untuk menjalankan pekerjaan SQL Agent yang menjalankan kueri Transact-SQL (T-SQL) di server jarak jauh melalui server tertaut, Anda perlu membuat pemetaan antara login di server lokal ke login di server jarak jauh yang memiliki izin untuk menjalankan kueri T-SQL. Ketika pekerjaan SQL Agent tersambung ke server jarak jauh melalui server tertaut, pekerjaan menjalankan kueri T-SQL dalam konteks login jarak jauh, yang harus memiliki izin yang diperlukan untuk menjalankan kueri T-SQL.

Jika Anda memetakan login untuk pekerjaan SQL Agent di Azure SQL Managed Instance, login lokal yang Anda petakan ke login jarak jauh harus menjadi pemilik pekerjaan Agen SQL, kecuali pekerjaan Agen SQL adalah sysadmin, dalam hal ini Anda harus memetakan semua login lokal. Untuk informasi selengkapnya, tinjau pekerjaan SQL Agent dengan Azure SQL Managed Instance.

Jalankan perintah sampel berikut di server lokal untuk memetakan login local_login_name lokal ke login login_name server jarak jauh saat menyambungkan ke server remote_servertertaut :

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = Nā€™<local_login_name>ā€™,
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>'

D. Memetakan semua login lokal ke login server jarak jauh

Dengan mengatur locallogin ke NULL, Anda dapat memetakan semua login lokal ke login di server jarak jauh.

Memetakan semua login lokal ke login server jarak jauh diperlukan saat menjalankan pekerjaan Azure SQL Managed Instance SQL Agent yang dimiliki oleh sysadmin yang meminta server jarak jauh melalui server tertaut. Untuk informasi selengkapnya, tinjau pekerjaan SQL Agent dengan Azure SQL Managed Instance. Ketika pekerjaan SQL Agent tersambung ke server jarak jauh melalui server tertaut, pekerjaan menjalankan kueri T-SQL dalam konteks login jarak jauh, yang harus memiliki izin yang diperlukan untuk menjalankan kueri T-SQL.

Jalankan perintah sampel berikut di server lokal untuk memetakan semua login lokal ke login login_name server jarak jauh saat menyambungkan ke server remote_servertertaut :

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>'

E. Memeriksa login tertaut

Contoh berikut menunjukkan semua login yang telah dipetakan untuk server tertaut:

SELECT s.name AS server_name, ll.remote_name, sp.name AS principal_name
FROM sys.servers s
INNER JOIN sys.linked_logins ll
    ON s.server_id = ll.server_id
INNER JOIN sys server_principals sp
    ON ll.local_principal_id = sp.principal_id
WHERE s.is_linked = 1;