Terhubung ke SQL Server dengan Windows Authentication di domain yang berbeda

74

Saya mencoba untuk terhubung ke SQL Server jarak jauh pada VPN di domain yang berbeda. Ketika saya memasukkan nama Server pada SQL Server dan memilih Parameter Koneksi Tambahan untuk menambahkan beberapa hal tambahan yang diperlukan oleh sekolah saya:

Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password

Saya mendapatkan kesalahan berikut:

Gagal masuk. Info masuk berasal dari domain yang tidak terpercaya dan tidak dapat digunakan dengan otentikasi Windows.

fxuser
sumber
Satu-satunya masalah dengan solusi Windows Credential Manager adalah jika Anda memiliki banyak basis data yang Anda dukung, Anda harus memiliki entri untuk masing-masing dan memperbaruinya setiap kali Anda harus memperbarui kata sandi domain Anda. Bagi sebagian orang itu bisa setiap 30 - 60 hari.
smehaffie
Ini posting agak terkait.
RBT
@smehaffie Anda dapat dengan mudah menggunakan scripting dan perintah "cmdkey / add" untuk memelihara kata sandi Anda - itu juga pembaruan.
Tuan Magoo

Jawaban:

70

Anda mencoba meneruskan kredensial Windows dalam teks biasa dari string koneksi aplikasi. Ini bukan bagaimana otentikasi Windows bekerja, dan sebagian besar mengalahkan tujuannya.

Anda juga tidak bisa hanya membuat nama pengguna yang sama dengan kata sandi yang sama di domain Anda sendiri, dan berharap itu berfungsi secara ajaib. Nama domain masih merupakan bagian dari validasi - mesin Anda harus menjadi bagian dari domain, atau domain yang digunakan mesin Anda harus dipercaya oleh domain sekolah.

Satu-satunya solusi yang saya tahu adalah untuk SSMS, dan itulah runas /netonlytrik yang dijelaskan dalam jawaban ini . Ini membodohi Windows untuk meluncurkan SSMS sebagai login yang Anda tentukan, bukan login Anda (ini bukan sesuatu yang dapat Anda atur dalam dialog Properties koneksi SSMS, ini adalah cara Anda perlu meluncurkan SSMS dari baris perintah atau pintasan):

runas /netonly /user:domain\username "C:\path_to\ssms.exe"

Ini akan meminta kata sandi Anda di domain jauh. Ini akan terlihat seperti menggunakan kredensial Windows lokal Anda, tetapi tidak .

Mungkin juga akan bekerja dengan Visual Studio, tapi saya benar-benar tidak tahu.

Jadi pilihan Anda adalah:

  • minta universitas memungkinkan Anda untuk bergabung dengan mesin Anda ke domain
  • minta universitas menambahkan domain Anda sebagai domain tepercaya
  • memiliki kotak lompatan di dalam VPN yang memungkinkan Anda untuk RDP dan menggunakan alat yang menghubungkan langsung ke mesin SQL Server
  • gunakan otentikasi SQL
  • coba runas /netonlytriknya dengan Visual Studio
  • gunakan saja runas /netonlytriknya dengan SSMS
Aaron Bertrand
sumber
The runashal tidak bekerja dengan Visual Studio.
Daniel Hutmacher
Apakah ada cara untuk meniru perilaku ini tanpa command prompt?
Gilles Lesire
1
@Gilles Anda dapat membuat file batch dan klik dua kali file batch, atau Anda dapat menggunakan string itu dan membuat pintasan mungkin
Aaron Bertrand
103

Ada cara lain, yang sekarang saya gunakan dalam preferensi untuk runas /netonlymetode ini.

Anda dapat menambahkan kredensial ke profil Anda di Windows menggunakan Credential Manager yang ditemukan di panel kontrol Windows.

  1. Buka Pengelola Kredensial
  2. Klik "Tambahkan Kredensial Windows"
  3. Isi bidang "internet atau alamat jaringan" dengan nama dan nomor port instance SQL yang ingin Anda simpan kredensialnya.

    Contoh: UniServer:1433(1433 adalah port default, Anda mungkin memerlukan port lain, terutama jika Anda menghubungkan ke instance bernama)

  4. Isi "Nama Pengguna" (jangan lupa sertakan domain misalnya MYDOMAIN\MYUSER)
  5. Isi "Kata Sandi"
  6. Klik OK

Jika Anda memiliki nama server, port, dan detail login yang benar, Anda sekarang harus dapat menggunakan Otentikasi Windows dari sebagian besar alat klien, SSMS, Excel, apa pun. Mereka semua akan menggunakan kredensial yang disimpan.

Kiat: Terkadang Anda perlu menggunakan FQN untuk server saat menambahkan kredensial. misalnya UniServer.UniDomain.org:1433, semuanya tergantung pada spesifikasi jaringan Anda.

Berikut ini adalah demo cepat dari metode ini: http://youtu.be/WiVBPsqB9b4

Ini adalah ambil layar saya mencoba (dan gagal) untuk terhubung ke SQL Server yang berjalan di VM dari desktop saya, kemudian menambahkan kredensial yang diperlukan dan mencoba lagi - berhasil.

Kiat: gunakan perintah "cmdkey / add" untuk membuat skrip dan memperbarui kredensial yang disimpan.

Tuan Magoo
sumber
Menarik! Tampaknya tergantung pada apa yang menurut mesin klien Anda mesin jarak jauh itu disebut bukan apa yang sebenarnya disebut. Saya telah memasukkan entri yang diciptakan ("verysillytest.mwardm") di file host saya untuk alamat IP (karena kita yang mengakses dari luar domain tidak akan melakukannya) dan mengatur kredensial atas nama "verysillytest.mwardm: 1433 ". Saya kemudian dapat terhubung dengan senang hati (dari aplikasi kecil bernama Query Express) menggunakan nama host atau alamat IP.
mwardm
@mwardm ya, itu sebabnya saya sarankan menggunakan ping atau nslookup karena akan memberi tahu Anda nama persis seperti yang Anda butuhkan, termasuk spesifik huruf besar / kecil.
Tuan Magoo
Ah, "ping-a" tidak memberi saya apa-apa dan nslookup tidak (segera) bekerja karena saya tidak menggunakan server DNS domain. Jangan khawatir, saya sebenarnya lebih suka fleksibilitas hanya dengan mengetahui alamat IP (dan login) dan mampu membuat nama saya sendiri!
mwardm
2
Luar biasa, ini berhasil! Saya hanya ingin tahu - apakah itu seharusnya berfungsi seperti itu atau itu bug atau desain gagal di sisi SQL Server? Microsoft atau orang-orang dari Microsoft beriklan di mana-mana bahwa Anda harus memiliki mesin yang terhubung dengan domain, jika tidak, tidak ada cara untuk terhubung ke SQL Server yang diatur untuk hanya menerima kredensial domain.
Dawid Ferenczy Rogožan
BTW Saya akan mengatakan bahwa jawaban ini harus ditandai sebagai diterima, karena tampaknya menjadi solusi nyata dan jawaban lainnya lebih seperti solusi.
Dawid Ferenczy Rogožan