Saya tahu ini hampir merupakan duplikat dari: Kesalahan "Login gagal untuk pengguna 'NT AUTHORITY \ IUSR'" di ASP.NET dan SQL Server 2008 dan Login gagal untuk 'nama pengguna' pengguna - System.Data.SqlClient.SqlException dengan LINQ di proyek eksternal / perpustakaan kelas tetapi beberapa hal tidak bertambah dibandingkan dengan aplikasi lain di server saya dan saya tidak yakin mengapa.
Kotak yang digunakan:
Kotak Web Kotak
Uji SQL
Kotak
SQL
Lamaran saya:
Saya memiliki Aplikasi Web ASP.NET, yang mereferensikan perpustakaan kelas yang menggunakan LINQ-to-SQL. String koneksi disiapkan dengan benar di perpustakaan kelas. Sesuai Login gagal untuk 'nama pengguna' pengguna - System.Data.SqlClient.SqlException dengan LINQ di perpustakaan proyek / kelas eksternal Saya juga menambahkan string koneksi ini ke Aplikasi Web.
String koneksi menggunakan kredensial SQL seperti itu (di aplikasi web dan pustaka kelas):
<add name="Namespace.My.MySettings.ConnectionStringProduction"
connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
providerName="System.Data.SqlClient" />
Sambungan ini dikonfirmasi berfungsi dengan menambahkannya ke Server Explorer. Ini adalah string koneksi yang digunakan file .dbml saya.
Masalah:
Saya mendapatkan kesalahan berikut:
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.
Sekarang referensi ini Kesalahan "Login gagal untuk pengguna 'NT AUTHORITY \ IUSR'" di ASP.NET dan SQL Server 2008 dikatakan bahwa itu benar-benar layanan jaringan lokal dan menggunakan nama non-domain lainnya tidak akan berfungsi.
Tapi saya bingung karena saya telah memeriksa SQL Box dan SQL Test Box SQL Management Studio dan keduanya ada di NT AUTHORITY/NETWORK SERVICE
bawah Keamanan -> Masuk, di tingkat basis data, yang tidak terdaftar di bawah Keamanan -> Pengguna, tetapi di tingkat basis data Keamanan -> Pengguna Saya memiliki pengguna yang ditampilkan dalam string koneksi.
Pada level NTFS di server web, izin memiliki NETWORK SERVICE yang memiliki kendali penuh.
Alasan mengapa saya bingung adalah karena saya memiliki banyak aplikasi web lain di Server Web saya, database referensi itu ada di SQL Box dan SQL Test Box, dan semuanya berfungsi. Tetapi saya tidak dapat menemukan perbedaan antara mereka dan aplikasi saya saat ini, selain saya menggunakan perpustakaan kelas. Apakah itu penting? Memeriksa izin NTFS, penataan Login Keamanan di tingkat server dan database, string koneksi dan metode penyambungan (kredensial SQL Server), dan kumpulan aplikasi IIS dan opsi folder lainnya, semuanya sama.
Mengapa aplikasi ini bekerja tanpa menambahkan machinename $ ke izin salah satu kotak SQL saya? Tapi itulah yang dikatakan oleh satu tautan kepada saya untuk memperbaiki masalah ini.
sumber
Jawaban:
LAYANAN JARINGAN dan LocalSystem akan mengotentikasi diri mereka sendiri selalu sebagai akun koresponden secara lokal (layanan jaringan \ bawaan dan sistem \ bawaan) tetapi keduanya akan mengautentikasi sebagai akun mesin dari jarak jauh.
Jika Anda melihat kegagalan seperti
Login failed for user 'DOMAIN\MACHINENAME$'
itu berarti bahwa proses berjalan sebagai LAYANAN JARINGAN atau sebagai LocalSystem telah mengakses sumber daya jarak jauh, telah mengautentikasi dirinya sebagai akun mesin dan ditolak otorisasi.Contoh umumnya adalah aplikasi ASP yang berjalan di kumpulan aplikasi yang disetel untuk menggunakan kredensial LAYANAN JARINGAN dan menyambungkan ke SQL Server jarak jauh: kumpulan aplikasi akan mengautentikasi saat mesin menjalankan kumpulan aplikasi, dan apakah akun mesin ini yang perlu diberi akses .
Jika akses ditolak ke akun mesin, maka akses harus diberikan ke akun mesin. Jika server menolak untuk login 'DOMAIN \ MACHINE $', maka Anda harus memberikan hak login ke 'DOMAIN \ MACHINE $' bukan untuk NETWORK SERVICE. Memberikan akses ke NETWORK SERVICE akan memungkinkan proses lokal yang berjalan sebagai NETWORK SERVICE untuk terhubung, bukan yang jarak jauh, karena yang jauh akan mengautentikasi sebagai, tebak Anda, DOMAIN \ MACHINE $.
Jika Anda mengharapkan aplikasi asp untuk menyambung ke SQL Server jarak jauh sebagai login SQL dan Anda mendapatkan pengecualian tentang DOMAIN \ MACHINE $ itu berarti Anda menggunakan Keamanan Terintegrasi dalam string koneksi. Jika ini tidak terduga, itu berarti Anda mengacaukan string koneksi yang Anda gunakan.
sumber
Galat ini terjadi ketika Anda telah mengkonfigurasi aplikasi Anda dengan IIS, dan IIS masuk ke SQL Server dan mencoba untuk masuk dengan kredensial yang tidak memiliki izin yang tepat. Kesalahan ini juga dapat terjadi saat replikasi atau pencerminan disiapkan. Saya akan membahas solusi yang selalu berhasil dan sangat sederhana. Buka SQL Server >> Keamanan >> Login dan klik kanan pada NT AUTHORITY \ NETWORK SERVICE dan pilih Properties
Di layar yang baru dibuka dari Properti Login, buka tab "Pemetaan Pengguna". Kemudian, pada tab "Pemetaan Pengguna", pilih database yang diinginkan - terutama database yang menampilkan pesan kesalahan ini. Di layar bawah, periksa peran db_owner. Klik OK.
sumber
Dalam kasus saya, saya memiliki
Identity="ApplicationPoolIdentity"
IIS Application Pool.Setelah saya menambahkan
IIS APPPOOL\ApplicationName
pengguna ke SQL Server, ini berfungsi.sumber
Pada dasarnya untuk mengatasi ini kita perlu menyiapkan beberapa seperti
String koneksi yang digunakan dengan otentikasi Windows menyertakan
Trusted_Connection=Yes
atribut atau atribut yang setaraIntegrated Security=SSPI
dalamWeb.config
fileKoneksi database saya dalam mode Otentikasi Windows. Jadi saya menyelesaikannya hanya dengan mengubah Application Pools Identity dari ApplicationPoolIdentity ke kredensial masuk domain saya DomainName \ MyloginId
Langkah:
Pilih Nama aplikasi Anda
Pergi ke Pengaturan Lanjutan
Bagi saya itu sudah diselesaikan.
Catatan: Di lingkungan Produksi atau TI, Anda mungkin memiliki akun layanan di bawah domain yang sama untuk identitas kumpulan aplikasi. Jika demikian, gunakan akun layanan alih-alih login Anda.
sumber
Trik yang berhasil bagi saya adalah menghapus
Integrated Security
dari string koneksi saya dan menambahkan string koneksi regulerUser ID=userName; Password=password
Anda diApp.config
perpustakaan Anda mungkin tidak menggunakan keamanan terintegrasi tetapi yang dibuat diWeb.config
adalah!sumber
Seorang kolega mengalami kesalahan yang sama dan itu karena kesalahan konfigurasi kecil di IIS.
Application Pool yang salah telah ditetapkan untuk aplikasi web.
Memang kami menggunakan Kumpulan Aplikasi khusus dengan Identitas khusus untuk memenuhi kebutuhan kami.
Di Manajer IIS lokalnya -> Situs -> Situs Web Default -> Nama Aplikasi Web Kami -> Pengaturan Dasar ... Kumpulan Aplikasi adalah "DefaultAppPool", bukan Kumpulan Aplikasi kustom kami.
Menetapkan kumpulan aplikasi yang benar memecahkan masalah.
sumber
Saya menambahkan
<identity impersonate="true" />
ke web.config saya dan berfungsi dengan baik.sumber
Bagi saya, masalah telah teratasi ketika saya mengganti akun bawaan bawaan 'ApplicationPoolIdentity' dengan akun jaringan yang diizinkan mengakses database.
Pengaturan dapat dibuat di Server Informasi Internet (IIS 7+)> Kumpulan Aplikasi> Pengaturan Lanjut> Model Proses> Identitas
sumber
Bagi saya, masalah dengan 'DOMAIN \ MACHINENAME $' diperbaiki dengan menyetel
DefaultApplicationPool
Identitas keNetworkService
.sumber
Kami telah mendapatkan pesan kesalahan serupa saat memproses database Analysis Services. Ternyata nama pengguna, yang digunakan untuk menjalankan contoh Analysis Services, belum ditambahkan ke Login Keamanan SQL Server.
Di SQL Server 2012, layanan SQL Server dan Analisis dikonfigurasi untuk dijalankan sebagai pengguna berbeda secara default. Jika Anda menggunakan default, selalu pastikan bahwa pengguna AS memiliki akses ke sumber data Anda!
sumber
Periksa apakah Anda punya
dalam string koneksi. Coba hapus yang akan menyelesaikan masalah Anda.
sumber
Saya juga mengalami kesalahan ini dengan pengguna terotentikasi SQL Server
Saya mencoba beberapa perbaikan, tetapi tidak berhasil.
Solusi dalam kasus saya adalah mengkonfigurasi "Mode Otentikasi Server" untuk memungkinkan otentikasi SQL Server, di bawah Studio Manajemen: Properti / Keamanan.
sumber
Satu-satunya hal yang tampaknya diabaikan oleh semua orang adalah bahwa Anda mungkin menginginkan keamanan terintegrasi = true. Anda mungkin memiliki situs yang berjalan di bawah akun kumpulan. Tidak apa-apa jadi dan masih mungkin untuk masuk ke server SQL dengan kredensial pengguna asli dan bukan kumpulan. Ini disebut delegasi terbatas. Jika Anda mengaktifkannya dan menyiapkan jendela SPN akan menerjemahkan kredensial kumpulan dengan permintaan pengguna yang masuk ke layanan akhir (SQL hanyalah salah satu layanan tersebut). Anda harus mendaftarkan SATU DAN HANYA server SQL yang melayani permintaan SQL di server web. Menyiapkan semua ini terlalu berat bagi saya untuk mencoba menjelaskan secara akurat di sini. Saya butuh waktu cukup lama untuk mengatasinya sendiri.
sumber
Saya menghabiskan beberapa jam mencoba untuk memperbaiki masalah dan saya akhirnya mendapatkannya - SQL Server Browser "Berhenti". Cara mengatasinya adalah mengubahnya ke mode "Otomatis":
mengutip dari sini
sumber
Saya memiliki masalah yang sama sebelumnya, menghapus
Persist Security Info=True
dari connectionstring berhasil untuk saya.sumber
Saya mengalami masalah ini ketika klien mengganti nama SQL Server. Layanan Pelaporan SQL dikonfigurasi untuk menyambung ke nama server lama, yang mereka juga telah membuat alias untuk yang dialihkan ke IP nama server baru.
Semua aplikasi IIS lama mereka berfungsi, mengarahkan ke nama server baru melalui alias. Berdasarkan firasat, saya memeriksa apakah mereka menjalankan SSRS. Mencoba menyambung ke situs SSRS Menghasilkan kesalahan:
"Layanan tidak tersedia.Hubungi administrator sistem Anda untuk menyelesaikan masalah. Administrator sistem: Server laporan tidak dapat terhubung ke database-nya. Pastikan database berjalan dan dapat diakses. Anda juga dapat memeriksa log pelacakan server laporan untuk mengetahui detailnya . "
Itu berjalan di server, tetapi gagal terhubung karena menggunakan alias untuk nama server lama. Mengonfigurasi ulang SSRS untuk menggunakan nama server baru, bukan yang lama / alias memperbaikinya.
sumber
sumber
Saya mendapat kesalahan ini mencoba menguji solusi menggunakan yang berikut ini
Cara saya menyelesaikannya adalah: Saya harus membuka Visual Studio dan menjalankannya di bawah akun lain, karena akun yang saya gunakan untuk membuka bukan akun Admin saya.
Jadi jika masalah Anda serupa dengan saya: sematkan VS ke bilah tugas, lalu gunakan Shift dan Klik Kanan untuk membuka menu sehingga Anda dapat membuka VS sebagai pengguna lain.
sumber
Saya menghargai ada beberapa jawaban yang bagus di sini, tetapi karena saya baru saja kehilangan waktu untuk mengerjakannya, semoga ini dapat membantu seseorang.
Dalam kasus saya, semuanya telah berfungsi dengan baik, kemudian berhenti tanpa alasan yang jelas dengan kesalahan yang disebutkan dalam pertanyaan.
IIS berjalan sebagai layanan Jaringan dan Layanan Jaringan telah disiapkan di SQL Server sebelumnya (lihat jawaban lain untuk posting ini). Peran server dan pemetaan pengguna tampak benar.
Masalahnya adalah; sama sekali tidak ada alasan yang jelas; Layanan Jaringan telah beralih ke hak Login 'Tolak' dalam database.
Memperbaiki:
Permission to Connect To Database Engine
ke 'Grant'.sumber