Saya memiliki proyek web (C # Asp.Net, EF 4, MS SQL 2008 dan IIS 7) dan saya perlu memigrasikannya ke IIS 7 secara lokal (saat ini berfungsi baik dengan CASSINI).
Secara lokal di IIS saya punya saya Default Web Site
dengan penyebaran saya. Kedua saya menyebarkan dan Default Web Site
berada di kolam ASP.NET v4.0 (mencari gambar untuk pengaturan) kerangka target kolam 4 sebagai proyek web saya.
Saat mengunjungi situs, browser tidak menampilkan halaman dan mengizinkan browser untuk mengunduh halaman.
Saya memiliki proyek lain yang berjalan di IIS secara lokal dan mereka bekerja tanpa masalah (tetapi mereka tidak menggunakan Entity Framework).
Menggunakan Event Logger saya melihat kesalahan seperti di bawah ini:
Exception information:
Exception type: EntityException
Exception message: The underlying provider failed on Open.
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
UPDATE: Anda dapat membaca di sumber daya pada pertanyaan ini bahwa izin harus diberikan pada MS SQL 2008 secara manual seperti yang dijelaskan dalam jawabannya. Menggunakan IIS 7.5 dan MS SQL 2008 R2, pengaturan izin secara manual tidak diperlukan.
sumber
Jawaban:
Sepertinya gagal mencoba membuka koneksi ke SQL Server.
Anda perlu menambahkan login ke SQL Server untuk
IIS APPPOOL\ASP.NET v4.0
dan memberikan izin ke database.Di SSMS, di bawah server, rentangkan Keamanan, lalu klik kanan Masuk dan pilih "Login Baru ...".
Dalam dialog Login Baru, masukkan kumpulan aplikasi sebagai nama login dan klik "OK".
Anda kemudian dapat mengklik kanan login untuk kumpulan aplikasi, pilih Properties dan pilih "Pemetaan Pengguna". Periksa database yang sesuai, dan peran yang sesuai. Saya pikir Anda bisa memilih
db_datareader
dandb_datawriter
, tetapi saya pikir Anda masih perlu memberikan izin untuk menjalankan prosedur tersimpan jika Anda melakukannya melalui EF. Anda dapat memeriksa detail untuk peran di sini .sumber
Anda dapat mengubah ApplicationPoolIdentity dari IIS7 -> Application Pools -> Pengaturan Lanjut.
Di bawah ApplicationPoolIdentity Anda akan menemukan sistem lokal. Ini akan membuat aplikasi Anda berjalan di bawah
NT AUTHORITY\SYSTEM
, yang merupakan login yang ada untuk database secara default.Sunting: Sebelum menerapkan saran ini, Anda harus mencatat dan memahami implikasi keamanan.
sumber
pastikan Anda memiliki ...
di String koneksi Anda
sumber
Saya memecahkan masalah ini menggunakan sql sebagai gambar berikut.
Klik kanan pada db-> properties -> izin -> Lihat izin Server -> lalu pilih
IIS APPPOOL\ASP.NET v4.0
dan berikan izin.sumber
Jalankan skrip sql ini
sumber
Jika dalam string koneksi yang Anda tentukan:
tetapi dalam string koneksi ada:
SQL Server akan menggunakan Otentikasi Windows, sehingga nilai koneksi Anda akan diabaikan dan diganti (IIS akan menggunakan akun Windows yang ditentukan dalam profil pengguna Identity). info lebih lanjut di sini
Hal yang sama berlaku jika dalam string koneksi ada:
atau
karena Windows Authentication akan digunakan untuk terhubung ke server database. info lebih lanjut di sini
sumber
buka iis -> kumpulan aplikasi -> temukan kumpulan aplikasi Anda yang digunakan dalam aplikasi
pilih kumpulan aplikasi Anda yang digunakan untuk aplikasi klik kanan pilih pengaturan lanjutan
Pilih identitas kumpulan aplikasi
pilih bawaan sebagai Sistem Lokal dan klik ok
sumber
Saya benci ApplicationPoolIdentity. Saya selalu menetapkan Akun Pengguna Windows sebagai akun di AppPools.
Seperti yang dikatakan terpaut, itu terdengar seperti masalah keamanan database. Jadi buat akun pengguna NT, tetapkan ke ASP.NET v4.0 AppPool dan kemudian berikan izin pada folder situs web dan ke tabel yang relevan dalam SQL.
sumber
Jangan gunakan Keamanan Terpadu. Menggunakan
User Id=yourUser; pwd=yourPwd;
Ini menyelesaikan masalah.
sumber
Saya memiliki masalah ini dan sebenarnya disebabkan oleh sesuatu yang berbeda - Saya memiliki pengguna 'IIS APPPOOL \ ASP.NET v4.0' di database saya tetapi masih tidak berfungsi.
Saya baru-baru ini memutakhirkan Instalasi SQL Server saya dan dalam proses itu Pengguna telah terputus dari Login - jadi ada 'IIS APPPOOL \ ASP.NET v4.0' di bawah Database -> Keamanan -> Pengguna TAPI tidak ada Pengguna yang tidak di bawah Keamanan -> Login.
Menambahkan Login 'IIS APPPOOL \ ASP.NET v4.0' ke Keamanan -> Login, SQL Server secara otomatis memetakannya ke Pengguna dalam database (ini dulunya harus dilakukan secara manual) dan masalah diperbaiki.
sumber
Hal pertama yang perlu Anda hapus jika Anda menggunakan otentikasi windows dan Anda tidak menyebutkan kata sandi nama pengguna dalam string koneksi Anda kemudian:
Apa yang terjadi ketika Anda menjalankan kode melalui localhost: ketika Anda menjalankan klien uji wcf Anda dari localhost, itu akan dapat berkomunikasi dengan basis data ketika aplikasi mode debug lokal memanggil basis data dengan layanan akun Anda. Jadi ia memiliki akses ke basis data karena devenv.exe berjalan di bawah akun pengguna Anda.
Tetapi ketika Anda menggunakan layanan web Anda di IIS. Sekarang pahami layanan ini berjalan di bawah IIS bukan di bawah akun Anda. Jadi Anda perlu menetapkan hak akses ke layanan IIS untuk mengakses server sql untuk otentikasi windows. Di sini layanan web Anda tidak akan dapat berkomunikasi dengan server SQL karena masalah hak akses dan Login Gagal untuk pengguna_______ (di sini pengguna Anda akan datang)
Jadi jika Anda menggunakan otentikasi windows untuk menghubungkan database Anda, Anda hanya perlu mengubah pengaturan kumpulan Aplikasi IIS. Anda perlu mengubah identitas kumpulan Aplikasi IIS ke Sistem lokal.
Berikut adalah Langkah-langkah untuk otentikasi Windows WCF:
1) Buka IIS (windows + R (run) lalu ketik inetmgr, lalu klik ok)
2) klik dua kali nama PC Anda di bawah Koneksi
3) Klik Kolam Aplikasi
4) Pilih kumpulan aplikasi Anda (DefaultAppPool)
5) Kemudian di bawah tindakan di klik kanan Pengaturan Lanjutan:
6) Pergi ke bagian Model Proses dan
7) klik pada Identity.
8) Sekarang pilih LocalSystem.
Sekarang buka studio manajemen server sql Anda: buka run-> lalu ketik ssms -> lalu tekan ok Dalam ssms, login menggunakan akun otentikasi windows Anda. Buka tab keamanan memperluas tab login maka Anda akan dapat melihat akun Anda.
Sekarang buka properti akun Anda, masuk ke pemetaan pengguna, lalu pilih database yang ingin Anda hubungkan, lalu periksa peran layanan keanggotaan yang ingin Anda gunakan untuk database yang dipilih. klik ok.
(Untuk layanan jaringan yaitu pengguna intranet, Anda perlu mengkonfigurasi pengaturan di atas untuk pengguna NT AUTHORITY \ SYSTEM)
tambahkan Trusted_Connection = Benar; properti dalam string koneksi Anda. Simpan & gunakan layanan web. Mulai ulang kumpulan aplikasi.
Anda akan dapat menghubungkan database sekarang.
sumber
Saya mendapat pesan ini dan saya menggunakan Otentikasi Windows di server web.
Saya ingin pengguna web yang saat ini diautentikasi untuk diautentikasi terhadap database, daripada menggunakan IIS APPPOOL \ ASP.NET v4 Pengguna yang ditentukan dalam App Pool.
Saya menemukan dengan memasukkan yang berikut ini di web.config memperbaiki ini untuk saya:
https://msdn.microsoft.com/en-us/library/bsz5788z.aspx
Saya melihat Jawaban lain tentang membuat nama pengguna AppPool di SQL DB atau hanya menggunakan SQL Auth. Keduanya akan benar jika Anda tidak ingin menangkap atau mengamankan setiap pengguna Windows di dalam SQL.
Tom
sumber
1_in SqlServer Security => Login => NT AUTHORITY \ SYSTEM => RightClick => Property => UserMaping => Pilih YourDatabse => Publik && Pemilik Select => OK 2_In IIs Aplikasi Pools DefaultAppPool => Pengaturan Lanjut => Identitas => LocalSystem => Ok
sumber
Pengaturan identitas hanya membuat ini berfungsi di halaman saya.
sumber
Cassini menjalankan situs web Anda sebagai identitas pengguna Anda sendiri ketika Anda memulai aplikasi Visual Studio. IIS menjalankan situs web Anda sebagai App Pool Identity. Kecuali App Pool Identity diberikan akses ke Database, Anda mendapatkan kesalahan.
IIS memperkenalkan App Pool Identity untuk meningkatkan keamanan. Anda dapat menjalankan situs web di bawah App Pool Identity default, atau Buat Pool App baru dengan namanya sendiri, atau Buat Pool App baru dengan nama sendiri yang berjalan di bawah Akun Pengguna (biasanya Akun Domain).
Dalam situasi jaringan (yang tidak ada di Azure) Anda bisa membuat App Pool baru berjalan di bawah akun pengguna Domain Direktori Aktif; Saya lebih suka ini daripada akun mesin. Hal tersebut memberikan keamanan granular dan akses granular ke sumber daya jaringan, termasuk basis data. Setiap situs web berjalan pada App Pool yang berbeda (dan masing-masing berjalan di bawah akun Pengguna Domain sendiri).
Terus menggunakan Keamanan Terintegrasi Windows di semua String Koneksi. Dalam SQL Server, tambahkan pengguna Domain sebagai login dan berikan izin ke database, tabel, SP dll berdasarkan per situs web. Misalnya DB1 yang digunakan oleh Website1 memiliki login untuk User1 karena Website1 berjalan pada App Pool sebagai User1.
Satu tantangan dengan penggelaran dari Visual Studio bawaan DB (misalnya LocalDB) dan Server Web bawaan ke lingkungan produksi berasal dari kenyataan bahwa pengguna pengembang SID dan ACL-nya tidak boleh digunakan dalam lingkungan produksi yang aman. Microsoft menyediakan alat untuk penyebaran. Tapi sayang pengembang yang buruk yang terbiasa dengan segala sesuatu hanya bekerja di luar kotak di VS IDE baru yang mudah dengan localDB dan localWebServer, karena alat ini akan sulit digunakan untuk pengembang itu, terutama untuk pengembang seperti itu yang kurang memiliki dukungan SysAdmin dan DBAdmin atau pengetahuan khusus mereka. Meskipun demikian penyebaran ke Azure lebih mudah daripada situasi jaringan perusahaan yang disebutkan di atas.
sumber
Jika string koneksi Anda ditambahkan di web.config Anda, pastikan bahwa "Keamanan Terpadu = false;" jadi itu akan menggunakan id dan kata sandi yang ditentukan dalam web.config.
sumber
Seperti yang ditunjukkan, Jangan gunakan Otentikasi Windows, Gunakan Otentikasi SQL Server
Juga jika Anda membuat koneksi menggunakan dialog "Server Connection", pastikan untuk memeriksa koneksi di web.config. Kemungkinan Anda membuat / memodifikasi koneksi dan disimpan sebagai koneksi tepercaya di web.config. Cukup gunakan otentikasi ini
yang seharusnya memperbaiki kesalahan.
sumber
Cara lain untuk memberikan izin ke database untuk pengguna
IIS APPPOOL\ASP.NET v4.0
adalah sebagai berikut.IIS APPPOOL\ASP.NET v4.0
skema default Anda.sumber
Saya pikir saya akan memposting ini sebagai jawaban karena relevan dengan pertanyaan dan dapat menjawabnya dalam beberapa kasus.
Pesan yang sama muncul juga jika basis data tidak ada!
Pastikan string koneksi Anda tidak salah eja, menunjuk ke instance server yang benar, dll.
sumber
Saya memiliki masalah yang sama saya menyelesaikannya dengan mengubah
Integrated Security=True
ke false sekarang ini berfungsisumber
sesuatu yang serupa terjadi pada saya apa yang berhasil bagi saya adalah mengubah properti Integrated Security = True ke Integrated Security = false di web.config situs web
sumber
Sudahkah Anda melakukan apa yang
@Teddy
disarankan dan Anda MASIH mendapatkan kesalahan yang sama?Pastikan Anda mengubah pengaturan untuk kumpulan aplikasi yang sesuai dengan direktori virtual Anda dan bukan server induk. Setiap direktori virtual memiliki AppPool sendiri dan tidak mewarisi.
sumber
Di DefaultAppPool atur NetworkService di properti Identity dan di Sql Server tambahkan User Network Service dan berikan izin yang sesuai untuk database Anda, itu bekerja dengan sangat baik untuk saya, saya telah menguji secara lokal tapi saya pikir ini adalah konfigurasi terbaik untuk menghubungkan dari sembarang komputer lain dalam jaringan. ketika Anda mengatur LocalSystem di Identity di IIS itu bekerja dengan baik dan tidak perlu membuat pengguna lain di Sql Server tapi saya pikir itu tidak akan berfungsi di lingkungan jaringan.
sumber
Saya mengalami masalah yang sama dengan pengujian ASP.NET Web API
Dikembangkan Web.Host di Visual Studio 2013 Express Database dibuat dalam SQL Server 2012 Express Uji dilaksanakan menggunakan built in IIS Express (berfungsi) Dimodifikasi untuk menggunakan IIS Lokal (dari halaman properti - opsi web) Uji berlari dengan Fiddler Received error - tidak dapat membuka database untuk penyedia .... mengutip 'APPPOOL \ DefaultAppPool'
Solusi yang berhasil.
Di IIS
Klik kumpulan aplikasi 'Set DefaultAppPool' Set Identify = 'ApplicationPoolIdentity' .NET framework = v4.0 (meskipun aplikasi saya adalah 4,5)
Di SQL Server Management Studio
Klik kanan pada folder Keamanan (di bawah mesin SQL Server sehingga berlaku untuk semua tabel) Klik kanan pada Pengguna dan tambahkan 'IIS APPPOOL \ DefaultAppPool' Dalam aman di kolom 'Hibah' periksa opsi yang ingin Anda berikan. Mengenai hal di atas jika Anda seorang DBA, Anda mungkin tahu dan ingin mengendalikan apa opsi itu. Jika Anda seperti saya, seorang pengembang hanya ingin menguji layanan WEB API Anda yang kebetulan juga mengakses SQL Server melalui EF 6 dalam gaya MVC maka cukup centang semuanya. :) Ya saya tahu tetapi itu berhasil.
sumber
Jika Anda menambahkan login baru, pastikan bahwa di bawah properti server (klik kanan -> properti) / keamanan, mode otentikasi diatur ke sqlserver dan windows bukan hanya windows.
sumber
Tambahkan "Semua Orang" di bawah keamanan. Jika Anda menambahkan Server dan pengguna masuk ke database, maka ini adalah sesuatu yang Anda lewatkan. Semoga ini membantu.
sumber
Sebagai catatan, jika Anda menemukan kesalahan ini setelah beralih dari
LocalDB
keSQLEXPRESS
, pastikan database sudah masukSQLEXPRESS
. Anda dapat memverifikasi ini di Management Studio.Saya memiliki masalah yang sama ketika menggunakan
Entity Framework
setelah beralih keSQLEXPRESS from LocalDB
. Saya harus menjalankanUpdate-Database
perintah. Saya berhasil terhubung setelah itu.sumber
Saya melakukan persis seperti yang dikatakan @JeffOgata tetapi saya mendapatkan kesalahan:
Saya melihat pesan kesalahan saya lagi dan katanya
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
Setelah menambahkan pengguna bernama
IIS APPPOOL\DefaultAppPool
semuanya berfungsi.sumber
Saya menggunakan SQL Server Profiler (tersedia di SSMS => menu Tools) dan melihat di sana (ketika IIS berusaha untuk terhubung ke database) bahwa pengguna IIS saya karena suatu alasan NT AUTHORITY \ IUSR, tidak peduli semua langkah yang direkomendasikan dalam jawaban dalam pertanyaan ini . Jadi saya menambahkan pengguna itu ke SQL Server, dan itu berhasil ...
sumber
Di formulir web Asp.net,
kesalahan ini diperbaiki saat menginstal asp.net dari:
Server Manager> Kelola> Tambahkan Peran dan Fitur> Peran Server> Server Web (IIS)> Server Web> Pengembangan Aplikasi> ASP.NET 3.5 / 4.6 diinstal.
masalah saya diperbaiki.
sumber