हम ऑडिट डेटाबेस (SQL सर्वर 2008) में प्रविष्टियों को लिखने के लिए LINQ से इकाइयों का उपयोग करते हैं। चूंकि यह एक समर्पित लेखापरीक्षा डेटाबेस है, इसलिए हम केवल पंक्तियां डालें - हम कभी भी किसी भी पंक्ति को पढ़ते हैं, उन्हें ऑडिटिंग एप्लिकेशन से अपडेट या हटाते हैं।एंटिफ़ाई फ्रेमवर्क इन्सर्ट की आवश्यकता है अनुमतियों का चयन करें
ऑडिटिंग एप्लिकेशन को कम विशेषाधिकार के सिद्धांत का उपयोग करना चाहिए, इसलिए हम इसकी आवश्यकता से अधिक अनुमतियां नहीं देना चाहते हैं। चूंकि हमने कभी भी कोई पंक्ति नहीं पढ़ी है, इसलिए हम डेटाबेस से चयन करने की अनुमति नहीं देना चाहते हैं।
चयन अनुमति ऑब्जेक्ट 'AuditEvent', डेटाबेस 'IdentifyAudit', स्कीमा 'dbo' पर मना कर दिया था:
हालांकि, जब हम डेटा लिखने के लिए प्रयास करते हैं, हम इस त्रुटि संदेश मिलता है।
var auditEvent = new AuditEvent(); auditEvent.EventType = eventType; auditEvent.Timestamp = timestamp; auditEvent.UserName = userName; auditEvent.ApplicationId = this.ApplicationId; this.objectContext.AddToAuditEvents(auditEvent); this.objectContext.SaveChanges();
हम चयन की अनुमति की आवश्यकता क्यों मेज पर लिखने के लिए, और अधिक महत्वपूर्ण है::
कोड सुंदर मानक एफई कोड है वहाँ किसी भी तरह से हम चाहते हैं कि आवश्यकता को दूर कर सकते हैं?
संपादित
एसक्यूएल प्रोफाइलर इस बयान से पता चलता निष्पादित किया जा रहा:
exec sp_executesql N'insert [dbo].[AuditEvent]([EventType], [Timestamp], [UserName], [ApplicationId])
values (@0, @1, @2, @3)
select [Id]
from [dbo].[AuditEvent]
where @@ROWCOUNT > 0 and [Id] = scope_identity()',N'@0 nvarchar(10),@1 datetimeoffset(7),@2 nvarchar(11),@3 nvarchar(36)',@0=N'UpdateUser',@1='2009-11-10 10:58:33.2814740 +01:00',@2=N'foo',@3=N'bar'
यह क्यों चयन अनुमतियों की जरूरत है क्योंकि आपरेशन रिटर्न का स्वत: जनरेट आईडी बताते हैं, डाली गई पंक्ति
प्रश्न अब बनी हुई है: मुझे अभी पंक्ति डालने वाली पंक्ति की आईडी जानने की आवश्यकता नहीं है, तो क्या कोई तरीका है कि मैं इस सुविधा को बंद कर सकता हूं?
एसक्यूएल प्रोफाइलर क्या दिखाता है? –
एसक्यूएल प्रोफाइलर डेटा शामिल करने के लिए संपादित प्रश्न। –