Tambahkan IIS 7 AppPool Identities sebagai SQL Server Logons

233

Saya menjalankan situs web IIS 7 dengan AppPool dari Mode Pipeline Terpadu . AppPools TIDAK berjalan di bawah NetworkService, dll. Identitas (berdasarkan tujuan), tetapi menggunakan AppPool Identitiy sendiri (IIS AppPool \ MyAppPool).

Ini disebut akun layanan atau akun virtual. (akun pengguna, yang bukan akun lengkap ...)

Saya ingin memberikan izin akun layanan ini (IIS AppPool \ MyAppPool) untuk terhubung ke SQL Server 2008 Express (berjalan dalam Mode Auth. Campuran).

Sementara SQL Server dapat menambahkan akun pengguna normal, akun virtual IIS AppPool \ MyAppPool tidak dapat ditambahkan ke log masuk yang valid (SQL Server mengatakan, bahwa akun tidak dapat ditemukan).

Apakah ada trik, apa saja yang saya perlukan untuk mengaktifkan agar akun virtual berfungsi? (proses w3wp.exe berjalan di bawah identitas ini sesuai dengan taskmgr, tapi saya tidak dapat menggunakan akun di keamanan NTFS ...)

Terima kasih atas bantuan Anda!

Maks
sumber

Jawaban:

382

"IIS APPPOOL \ AppPoolName" akan berfungsi, tetapi seperti yang disebutkan sebelumnya, tampaknya bukan nama AD yang valid sehingga ketika Anda mencarinya di kotak dialog "Pilih Pengguna atau Grup", itu tidak akan muncul (sebenarnya , ia akan menemukannya, tetapi ia akan menganggapnya sebagai akun sistem yang sebenarnya, dan ia akan mencoba memperlakukannya seperti itu ... yang tidak akan berfungsi, dan akan memberi Anda pesan kesalahan tentang itu tidak ditemukan).

Cara saya membuatnya berfungsi adalah:

  1. Di SQL Server Management Studio, cari folder Security (folder keamanan di tingkat yang sama dengan folder Databases, Server Objects, dll. ... bukan folder keamanan dalam setiap basis data individual)
  2. Klik kanan login dan pilih "Login Baru"
  3. Di bidang Nama masuk, ketik IIS APPPOOL \ YourAppPoolName - jangan klik pencarian
  4. Isi nilai apa pun yang Anda suka (mis., Tipe otentikasi, database default, dll.)
  5. Klik OK

Selama nama AppPool benar-benar ada, login sekarang harus dibuat.

dp.
sumber
4
Maaf menghidupkan kembali pos lama, tetapi apakah ada yang tahu jika melakukan hal ini memiliki implikasi keamanan di lingkungan langsung?
dooburt
34
luar biasa membantu, namun mengejutkan (dan crappily) Microsoftian.
Evan Nagle
16
Wow. "jangan klik pencarian" pada langkah 3 tampaknya membuat perbedaan (?)
Jedidja
16
Bukankah ini akan gagal jika contoh SQL server ada di server lain? Misalnya - bagaimana SQL1pengetahuan tentang lokal / virtual IIS AppPool\MyAppPoolmenyala WEB1?
one.beat.consumer
3
Apakah ada solusi jika Server Web Anda dan SQL Server berada pada mesin yang berbeda !! ?? Saya dapat menemukan login, tetapi saya tidak dapat membuat Login SQL baru. (Jika saya tidak melakukan pemeriksaan nama ... masih tidak berhasil)
Dan B
63
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Ryan Prechel
sumber
1
Bagus - sementara jawaban yang diterima benar - saya berhasil membuat diri saya dalam situasi di mana Management Studio tidak bekerja sehingga solusi TSQL mentah ini adalah yang saya butuhkan.
Andrew Patterson
4
Catatan untuk noobs seperti saya: pastikan untuk mengeksekusi query ini terhadap database yang ingin Anda akses dengan kumpulan aplikasi IIS, pernyataan kedua adalah pada level database. Anda mungkin perlu menjadikan pengguna anggota peran basis data tertentu dan memberinya izin pada skema seperti dbo.
MarioDS
Setelah saya menemukan bahwa tidak mungkin untuk menambahkan login IIS APPPOOL melalui GUI SSMS, saya menjalankan skrip Anda. TERIMA KASIH! DIGUNAKAN untuk memungkinkan - tidak dalam SSMS 18! Saya kira ini sekarang "fitur"
MC9000
6

Jika Anda melintasi mesin, Anda harus menggunakan LAYANAN JARINGAN, SISTEM LOKAL, akun domain, atau SQL 2008 R2 (jika Anda memilikinya) Akun Layanan Terkelola (yang merupakan pilihan saya jika Anda memiliki infrastruktur seperti itu) . Anda tidak dapat menggunakan akun yang tidak terlihat oleh domain Direktori Aktif.

Dave Markle
sumber
6

Sebagai catatan tambahan, proses yang menggunakan akun virtual (NT Service \ MyService dan IIS AppPool \ MyAppPool) masih berjalan di bawah akun "LAYANAN JARINGAN" sebagaimana posting ini menyarankan http://www.adopenstatic.com/cs/blogs/ken/ arsip / 2008/01/29 / 15759.aspx . Satu-satunya perbedaan adalah bahwa proses ini adalah anggota grup "NT Service \ MyService" atau "IIS AppPool \ MyAppPool" (karena ini sebenarnya adalah grup dan bukan pengguna). Ini juga merupakan alasan mengapa proses otentikasi di jaringan sebagai mesin dengan cara yang sama seperti akun NETWORK SERVICE.

Cara untuk mengamankan akses tidak bergantung pada akun ini yang tidak memiliki hak istimewa LAYANAN NETWORK tetapi untuk memberikan lebih banyak izin khusus untuk "NT Service \ MyService" atau "IIS AppPool \ MyAppPool" dan untuk menghapus izin untuk "Pengguna" jika perlu.

Jika ada yang memiliki informasi yang lebih akurat atau kontradiktif, silakan kirim.

Steven
sumber
2

Ini mungkin yang Anda cari ...

http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx

Saya juga akan menyarankan jangka panjang untuk mempertimbangkan pengguna domain hak terbatas, apa yang Anda coba berfungsi dengan baik dalam skenario mesin silo tetapi Anda harus membuat perubahan jika Anda pindah ke komputer lain untuk server DB.

keithwarren7
sumber
0

Saya mengetahuinya melalui coba-coba ... celah sebenarnya dalam baju besi itu sedikit dikenal pengaturan di IIS di Configuration Editoruntuk situs web di

Section: system.webServer/security/authentication/windowsAuthentication

From: ApplicationHost.config <locationpath='ServerName/SiteName' />

disebut useAppPoolCredentials(yang diatur Falsesecara default. Tetapkan ini ke Truedan hidup menjadi hebat lagi !!! Semoga ini menyelamatkan rasa sakit untuk pria berikutnya ....

masukkan deskripsi gambar di sini

Dan B
sumber
Saya mengikuti proses yang sama, tetapi masalahnya tidak terpecahkan. Anda pasti telah melakukan hal lain juga, bisakah Anda berbagi?
RSB
@RSB - apakah Anda mengikuti semua langkah lainnya? apakah Anda mengatur appPools, dan memberi mereka izin ke file di mana situs web Anda berada? Apakah Anda menambahkan nama server sebagai login dengan izin ke SQL Server? Apakah Anda aplikasi appPool ke SQL Server Anda dengan izin? Apakah Anda memodifikasi IIS untuk menggunakan WindowsAuthentication? Kesalahan apa yang Anda dapatkan? Apakah itu bekerja di lingkungan pengembang Anda dan bukan produksi?
Dan B
Saya mengatur appPool, tetapi bagaimana cara memberi mereka izin ke file di mana situs web berada? Bagaimana cara menambahkan nama server sebagai login dengan izin ke server SQL? Saya juga menambahkan appPool ke SQL Server dengan izin. Bagaimana memodifikasi IIS untuk menggunakan WindowsAuthentocation. Ini berfungsi di lingkungan dev saya ketika IIS dan sql server berada di mesin yang sama, tetapi ia memberikan error-System.ComponentModel.Win32Exception: Kesalahan akses ditolak ketika IIS dan Sql server berada di mesin yang berbeda. Tolong sarankan.
RSB
jika Anda memberi saya email Anda, saya akan mengirimkan kepada Anda dokumen yang saya buat tentang bagaimana melakukan semuanya .... ada terlalu mucj untuk menambahkannya di sini ...
Dan B
@RSB Saya mengirimi Anda email. Semoga berhasil.
Dan B
0

Dalam kasus saya masalahnya adalah saya mulai membuat proyek sampel MVC Alloy dari awal menggunakan ekstensi Visual Studio / Episerver dan bekerja dengan baik ketika dieksekusi menggunakan Visual studio iis express lokal. Namun secara default itu menunjuk database sql ke LocalDB dan ketika saya menyebarkan situs ke IIS lokal itu mulai memberikan kesalahan beberapa kesalahan awal saya diselesaikan dengan: 1. menambahkan url situs lokal yang mengikat C: / Windows / System32 / driver / etc / hosts 2. Kemudian dengan mengedit application.config menemukan lokasi file dengan mengklik kanan IIS express di sudut kanan layar ketika menjalankan situs menggunakan Visual studio dan menambahkan ikatan di sana untuk url iis lokal. 3. Akhirnya saya terjebak dengan "tidak dapat mengakses kesalahan basis data"

arokanika
sumber