SQL Server ke sql server yang terhubung pengaturan server

25

Tolong jelaskan apa yang diperlukan untuk menyiapkan server tertaut SQL Server.

Server A adalah hanya login windows SQL 2005 Server B adalah sama (hanya login windows SQL 2005)

Server A menjalankan windows XP Server B menjalankan Windows Server 2003

Kedua layanan SQL Server berjalan di bawah akun domain yang sama. Saya masuk ke workstation saya dengan akun domain yang memiliki hak administratif di kedua SQL Server.

Catatan ini adalah SQL Server 2005 SP2 - saya sudah memiliki perbaikan terbaru yang ditunjukkan kepada saya, tetapi itu sudah diterapkan.

Masalah yang saya alami adalah kesalahan ini: "Login gagal untuk pengguna 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, Error: 18456)"

ScottStonehouse
sumber

Jawaban:

18

Dari pemahaman saya tentang masalah ini, ini adalah masalah "HOP".

yaitu Anda mencoba menggunakan server A untuk menyampaikan detail login Anda (dengan SSPI) ke Server B.

Dalam SQL Server 2005 mereka telah menambahkan banyak masalah keamanan yang membuat ini lebih sulit dari yang seharusnya. Kata-kata "Otentikasi Kerberos" akan menjadi bain bagi sebagian besar sys-admin / DBA. Secara efektif digunakan untuk otentikasi pass-through.

Inilah dasar-dasar dari apa yang Anda butuhkan. 1) Server (A dan B) perlu diatur di Active Directory (AD) dengan delegasi untuk Kerberos diaktifkan. (ini diatur melalui panel admin direktori aktif Anda)

2) Akun layanan yang dijalankan oleh SQL Server Anda juga perlu mengaktifkan delegasi (ini juga diatur melalui panel admin direktori aktif Anda). - jika mereka tidak berjalan di bawah akun layanan, Anda harus membuatnya.

3) Server harus memiliki SPN yang ditentukan untuk instance dan HOST dan nama mesin. (Menggunakan alat yang disebut SetSPN di alat dukungan windows)

Alat Pendukung (SetSPN ada dalam set ini) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(Ikhtisar cara menambahkan SPN) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) Anda mungkin perlu mengatur DB Anda menjadi "dapat dipercaya"

ALTER DATABASE SET dapat dipercaya

5) Setelah semua ini selesai, restart instance Anda.

6) Kemudian coba buat server tertaut Anda lagi.

Akhirnya Anda dapat menguji koneksi Anda ke SQL Server. Ini akan berfungsi dengan baik jika Anda telah mengkonfigurasi semuanya dengan benar.

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=ServerB;Integrated Security=SSPI;'
    ).MASTER.dbo.syscolumns

Ini akan memberi tahu Anda jenis otentikasi koneksi Anda.

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID

Anda ingin mendapatkan 'KERBEROS' di sini dan bukan 'NTLM'.

Ini adalah lereng yang licin, KERBEROS dan delegasi Pass-through, tetap dengan itu dan Anda akhirnya akan mengetahuinya.

Referensi Kerberos http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx

http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx

Manifestasi lain dari masalah http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx

http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx

http://msdn2.microsoft.com/en-us/library/ms189580.aspx

Saya harap ini semua membantu.

penjahat
sumber
Jawaban bagus! Ini jelas meringkas banyak info yang tidak berguna diatur di tempat lain.
ConstantineK
3

Anda juga dapat menggunakan SQL Server Management Studio (SSMS) untuk mengelola \ membuat server tertaut juga jika Anda lebih nyaman dengan GUI. Untuk melakukannya:

  1. Luncurkan SSMS dan sambungkan ke salah satu contoh SQL Server yang ingin Anda tautkan
  2. Rentangkan "Server Objects" di Object Explorer
  3. Klik kanan "Server Tertaut" dan pilih "Server Tertaut Baru"
  4. Pada dialog "New Linked Server", pilih "SQL Server" sebagai Jenis Server dan masukkan contoh SQL Server yang ingin Anda tautkan.
  5. Pada halaman "Keamanan", pilih bagaimana pengguna akan mengautentikasi dari server saat ini ke server yang ditautkan. Anda menyebutkan bahwa kedua server diatur untuk menggunakan Windows Login. Jika ini masalahnya, di bawah bagian yang berlabel "Untuk login yang tidak didefinisikan dalam daftar di atas, koneksi akan:" Saya mungkin akan memilih opsi yang berlabel "Dibuat menggunakan konteks keamanan Login saat ini" .

Perhatikan bahwa ini mengasumsikan bahwa pengguna yang memiliki login di server A juga memiliki login di server B.

Tim Lentine
sumber
1

Saya akan gila dengan masalah yang sama! Saya ingat melakukan ini dengan 2000 selalu mudah. Saya telah menjelajahi Google dan saya tidak bisa menjalankannya. Pengaturan yang sama persis, kedua server berjalan pada akun domain, Windows auth.

Saya mencoba menggunakan pipa bernama bukan TCP dan setidaknya saya mendapatkan kesalahan yang berbeda:

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

Ini mungkin ada hubungannya dengan mengaktifkan nama pipa, tetapi saya dapat terhubung melalui sqlcmd dari server A ke server B seperti ini:

WALDORF:>  Sqlcmd.exe /E /Snp:statler

Jika saya tidak menggunakan pipa bernama, dan lakukan saja:

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

Saya mendapatkan ini:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[Sunting] Saya memulai diskusi tentang Sql Server Central tentang ini. Pada dasarnya, Anda harus melakukan beberapa konfigurasi rumit yang terkait dengan delegasi Kerberos untuk membuatnya berfungsi.

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

Saya memutuskan untuk hanya membuat satu akun, Sql Login terbatas untuk menangani kueri tertaut. Saya benci menggunakan itu, tetapi tampaknya lebih aman daripada perubahan yang Anda buat untuk membuatnya bekerja dengan windows auth.

Eric Z Beard
sumber
Lihat di bawah untuk pengaturan Kerberos yang rumit. Hal ini telah membunuhku untuk waktu yang sangat lama!
evilhomer
0

Jika Anda melakukan pencarian di server sp_addlinkedserver dan sp_linkedservers, Anda mendapatkan beberapa contoh. Pengaturannya cukup mudah.

Tim Cochran
sumber
0

Juga jika Anda memiliki SQL Manager, Anda dapat menambahkan dengan itu GUI.

Pada dasarnya Anda perlu menautkan dua server baik oleh SP yang disebutkan oleh Tim, atau melalui GUI dan kemudian menetapkan aturan akses (yang bahkan tidak diperlukan jika Anda menggunakan otentikasi Windows di kedua server).


sumber
0

Saya tahu ini seharusnya mudah, tetapi sama sekali tidak bekerja untuk saya - Saya mengalami masalah keamanan di sini. Jadi saya ingin seseorang menjelaskan langkah-langkahnya untuk saya.

Saya telah melakukan ini di masa lalu pada SQL 2000 tanpa masalah.

ScottStonehouse
sumber
0

Jadi Anda dapat menautkannya, tetapi tidak dapat menjalankan kueri karena akun yang salah?

Apakah pengguna windows yang Anda coba gunakan memiliki hak untuk membaca data di kedua server?

Pernah saya juga punya masalah karena properti "akses data" disetel ke false untuk beberapa alasan yang tidak diketahui.

Coba juga apa yang terjadi jika Anda secara eksplisit mengatur satu pengguna ke pengguna lain untuk tautan tersebut.

(Ini semua bisa dilakukan dalam SQL Manager.)


sumber
0

Tim telah memposting langkah-langkah tepat yang saya asumsikan adalah yang benar. Langkah 5 adalah halaman keamanan. Saya memilih "Dibuat menggunakan konteks keamanan login saat ini".

Ketika saya mengklik ok, saya mendapatkan kesalahan berikut. Saya tidak tahu mengapa ini mencoba menggunakan 'NT Authority \ Anonymous login'. Saya masuk ke workstation saya dengan akun domain saya yang memiliki semua hak di kedua server.

TITLE: Microsoft SQL Server Management Studio

"Server tertaut telah dibuat tetapi gagal tes koneksi. Apakah Anda ingin menyimpan server tertaut?"

------------------------------ INFORMASI TAMBAHAN:

Pengecualian terjadi saat menjalankan pernyataan atau kumpulan Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


Gagal masuk untuk pengguna 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, Kesalahan: 18456)

Untuk bantuan, klik: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476

ScottStonehouse
sumber
0

Coba lakukan ini saat Anda masuk secara lokal ke server, jika Anda melakukannya dari mesin jarak jauh Anda mungkin tidak mengirim kredensial yang tepat.


sumber