كيف يمكنني الوصول إلى قاعدة البيانات عن طريق المجلد الظاهري الذي يشير في مشاركة بعيدة

StackOverflow https://stackoverflow.com/questions/339663

سؤال

أواجه مشكلة في الحصول على حق الوصول إلى قاعدة البيانات التي تعيش على ملقم بعيد.

لدي ASP.NET 2.0 صفحة ويب التي تحاول الاتصال بقاعدة بيانات.
يتم الوصول إلى قاعدة البيانات عن طريق مجلد ظاهري (التي أنشئت في IIS).
المجلد الظاهري نقاط في مشاركة بعيدة الذي يحتوي على قاعدة البيانات.

المجلد الظاهري (في تطبيقات الويب الدليل الجذر) هو الإشارة إلى مشاركة على ملقم بعيد عبر مسار UNC:

\\databaseServerName\databaseFolder$\ 

الافتراضي مجلد 'قراءة' و 'استعراض' permissions مجموعة 'الحقيقية'.

أنا مخزن سلسلة الاتصال في 'appSettings' قسم من شبكة الإنترنت.التكوين:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=http://webAppServerName/virtualFolderName/databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

كائن الاتصال هو declard على بلدي .صفحة aspx:

Dim objConnVirtual As New OleDbConnection(ConfigurationManager.AppSettings("conStrVirtual"))

هنا هو رمز الذي يحاول استخدام كائن الاتصال:

Public Sub Test()
    If objConnVirtual.State <> ConnectionState.Open Then
        objConnVirtual.Open()
    End If
    Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM TableName", objConnVirtual)
    objDR = cmd.ExecuteReader()
    If objDR.Read() Then
        response.write("Shazaam! Data shows up here")
    End If
    objDR.Close()
    objConnVirtual.Close()
End Sub

عند تشغيل التعليمات البرمجية أعلاه أحصل على الخطأ التالي (على هذا الخط من التعليمات البرمجية 'objConnVirtual.Open()':
تفاصيل الاستثناء:النظام.البيانات.OleDb.OleDbException:ليس اسم ملف صالح.

لقد راجعت اسم قاعدة البيانات وهو الصحيح (حتى نسخ/لصق للتأكد)

إذا أنا وضعت 'مصدر البيانات' قسم من سلسلة الاتصال في شريط عنوان المتصفح الخاص بي يمكنني بنجاح لرؤية محتويات مشاركة على الملقم البعيد.

لست متأكدا إذا كان هذا هو مشكلة مع أذونات أو مع رمز.
لقد بحثت على حماقة من هذا ولكن لم تكن قادرة على العثور على حل.

أي مساعدة هي موضع تقدير كبير.

هل كانت مفيدة؟

المحلول 5

التحديث

أولا شكرا لكل من قدم إجابات.

ومع ذلك, لقد انتهى الأمر لا باستخدام اتصال قواعد البيانات عن بعد عبر المجلد الظاهري' الأسلوب لأن تعقيد الأذونات اللازمة للحصول على هذا العمل كان يسبب لنا مشاكل أكثر مما كان يستحق.نضع UNC مرة أخرى في سلسلة الاتصال التي قد لا تكون أفضل طريقة للقيام بذلك ، ولكن العمل بالنسبة لنا.

نصائح أخرى

عند الوصول إلى البعيد الوصول MDB قاعدة البيانات ، يجب تحديد مسار UNC مثل \ emoteMachine\Share est.mdb.

تأكد من هوية تجمع التطبيق لديه الأذونات المناسبة للاتصال مشاركة بعيدة.بشكل افتراضي على IIS 6 كنت تعمل مع حساب "خدمة الشبكة" ، وهو افتراضيا لا يسمح للوصول إلى مشاركة بعيدة.

فإن أفضل طريقة هي أن السماح AppPool تشغيل مع خدمة مخصصة المستخدم.

ما هو الحساب المستخدمة على الخادم الخاص بك عندما الخاص بك على شبكة الإنترنت التطبيق يحاول قراءة db الملف ؟ أيا كان هذا في حساب المستخدم ، يجب أن يكون لديك أذونات قراءة هذا المجلد/الملف.في IIS6 يمكنك تكوين المجلد الظاهري إلى استخدام أي حساب المستخدم...على علامة التبويب أمان الدليل هناك زر تحرير في إطار المصادقة والتحكم بالوصول.

يبدو من المرجح أن رسالة الخطأ الخاصة بك هو مجرد رسالة خطأ عامة ، الأذونات المشكلة هي القضية الحقيقية.

تأكد من أن ملقمات اثنين الداخلية الوصول إلى بعضها البعض و أيضا تحديد ip & ميناء db server في سلسلة الاتصال الخاصة بك .

التحديث

أود أن أذكر أيضا أنه يعمل على الجهاز الخاص بي (ولكن ليس مرة واحدة تحميل تصل إلى إنتاج مربع) إذا أعلن سلسلة الاتصال في 'appSettings' قسم من شبكة الإنترنت.التكوين مثل هذا:

<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=\\databaseServerName\databaseFolder$\databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>

هذا يجعلني أعتقد أنه يمكن أن يكون مشكلة مع الحاجة إلى استخدام أوراق اعتماد المجال غير المحلية IUSER الحساب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top