سؤال

لقد عملت Elmah على خادم التطوير (Cassini) الخاص بي ، وكنت سعيدًا جدًا به ، لكن الآن بعد أن أحاول نقل كل شيء إلى خادم الإنتاج الخاص بي (IIS7) ، يبدو شهر العسل قد انتهى.

لقد تجاوزت "gotcha" مع IIS7, ، وهو ما كان يمكن تسليط الضوء عليه بصراحة بشكل أفضل في الوثائق ، وإذا استخدمت فقط سجل الذاكرة ، فإنه يعمل.

ومع ذلك ، أحاول أن أجعله يستخدم سجل SQL Server (كما أفعل في نظام التطوير الخاص بي) ، وأتلقى خطأ على غرار:

تم رفض إذن التنفيذ على الكائن elmah_geterrorsxml

حسنا ، بخير. أعرف كيفية منح أذونات قاعدة البيانات ، لكنني أعاني حقًا من أجل فهم المستخدم وأي برامج/جداول مخزنة أحتاج إلى منحها.

الشيء الذي يربكني حقًا هو أنه لم يكن عليّ فعل أي شيء مثل هذا للحصول على العمل على خادم التطوير الخاص بي. الفرق الوحيد الذي يمكنني رؤيته هو أنه على خادم التطوير الخاص بي ، يبدو أنه يتصل كسلطة NT iusr ، في حين أنه يبدو أنه على خادم الإنتاج الخاص بي ، يبدو أنه يتصل كخدمة NT Authority Network. (إنه يستخدم مجرد اتصال موثوق به ، لذا لم أقم بتكوينه بشكل صريح للقيام بذلك - أفترض أن الأمر يتعلق بخادم الويب). تحديث: لقد أثبتت ذلك منذ ذلك الحين لأنني أستخدم Cassini ، فقد كان في الواقع يقوم بتسجيل الدخول مثلي (مسؤول) وليس IUSR ، وهو ما يفسر لماذا لم أحصل على أي مشاكل إذن.

على خادم التطوير الخاص بي ، يعد حساب IUSR عضوًا في دور قاعدة البيانات العامة ، ولديه الوصول إلى قاعدة البيانات المطلوبة (مرة أخرى على أنها "عامة"). لا يوجد منح صريحة لأذونات على مستوى الكائن. [انظر التحديث أعلاه - هذا غير ذي صلة].

على خادم الإنتاج الخاص بي ، أضفت خدمة الشبكة بنفس الطريقة بالضبط (دور قاعدة البيانات العامة ، وصول صريح إلى قاعدة البيانات كـ "عامة"). ومع ذلك ، أحصل على هذا الخطأ الإذن. لماذا؟!! [انظر التحديث أعلاه - السبب الوحيد لا الحصول على خطأ إذن هو أنني أشغل كمسؤول].

وبطبيعة الحال ، إذا كان حقيقة أنه يعمل محليًا هو مجرد "حظ" ، فسأحتاج إلى معرفة الجداول/الجداول الخاصة بـ SPS التي يجب منحها للوصول إليها. أعتقد أن كل SPS 3 و ليس الجدول ، ولكن سيكون من الجيد (مرة أخرى) رؤية بعض الوثائق التي تجعل هذا الأمر واضحًا.

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

المحلول

هل تزود Elmah بالاتصالات الكاملة في الويب. إذا كان الأمر كذلك ، يجب أن تعرف بالضبط ما هو مستخدم DB لمنح أذونات ، أليس كذلك؟ ونعم ، سيكون الإذن هو تنفيذ الإجراءات الثلاثة المخزنة ...

إليك التكوين الذي استخدمته:

<elmah>
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" />
</elmah>

<connectionStrings>
    <add name="elmah" connectionString="Data Source=XXX;Initial Catalog=XXX;User Id=XXX;Password=XXX;" providerName="System.Data.SqlClient" />
</connectionStrings>

نصائح أخرى

مثال على SQL اللازم لمنح تنفيذ الإذن لمستخدم User_name:

GRANT EXECUTE ON ELMAH_GetErrorsXml TO USER_NAME
GRANT EXECUTE ON ELMAH_GetErrorXml TO USER_NAME
GRANT EXECUTE ON ELMAH_LogError TO USER_NAME
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top