سؤال

مرحبا لدي الجدول الذي يجب رفض تحديد privs إلى المستخدم.
هذا الجدول يحتوي على الزناد وهي من المراجع إدراج الجدول في الأساس يقوم

AFTER UPDATE SET <table>.[UPDATED] = getdate() 
  WHERE ROWID IN SELECT ROWID FROM INSERTED

انه يعطيني خطأ على الرغم قائلا "حدد الأذونات نفى", وأنا على التخمين بسبب حدد من المدرج.

كيف يمكنني الحفاظ على تحديد ينكر ، ولكن تسمح تؤدي إلى تحديد من إدراج pseudotable?

شكرا مقدما!

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

المحلول

النظر في إضافة تنفيذ شرط لذلك الزناد يعمل مع مالك المخطط أذونات.

CREATE TRIGGER [dbo].[TR_Product_Update] ON [Product]
   WITH EXECUTE AS OWNER
   AFTER UPDATE
AS
SELECT ProductId
FROM INSERTED

نصائح أخرى

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

- تحرير -

في التعليقات طلبت أم لا SQL Server سياق معلومات عن الفندق.2005 لا يمكنك أن ترى كيفية استخدامه هنا.

الدورة متغير Context_Info:الدورة هو أداة قوية في أي لغة برمجة.SQL Server هو غير كامل ريش لغة البرمجة ولكن هل يدعم الدورة متغير الدورة الحالية أو اتصال.فإنه يخزن قيمة الدورة في 128 بايت من المعلومات الثنائية.

الانضمام إلى إدراج الجدول بدلا شيئا مثل:

update t1
set updated = getdate()
from table1 t1
join inserted i
on i.rowid = t1.rowid

هذا سوف وprobaly أيضا أؤدي أفضل من subselect على أي حال.

وأظن المشكلة أن التحديث البيان في حد ذاته يتطلب تحديد إذن.

أنا خلقت بيانات الاختبار على النحو التالي:

DROP DATABASE triggerPermissionTest
CREATE DATABASE triggerPermissionTest
GO
USE triggerPermissionTest
GO
CREATE USER foo FROM LOGIN tester
GO
CREATE TABLE triggerTable (id int)
GO
DENY SELECT ON triggerTable to foo
GRANT UPDATE ON triggerTable to foo
GO
CREATE TRIGGER execAsTrigger ON triggerTable
AFTER UPDATE AS SELECT * FROM triggerTable
GO
INSERT INTO triggerTable VALUES (1)
GO

وحاول بعد تحديث البيانات مع 'اختبار' تسجيل الدخول:

UPDATE triggerTable SET id = 2
GO
UPDATE triggerTable SET id = id *2
GO

أول واحد ينفذ بخير و على الزناد ينفذ (تقديم نتائج حدد * من triggerTable إلى المستخدم دون حدد الأذونات ، مما يدل على أنه تمكن من القيام حدد).

ثاني واحد يعطيني خطأ تفيد بأنه لا يجب تحديد إذن على triggerTable (لأنه يحتاج إلى تحديد من triggerTable من أجل الحصول على قيمة معرف هل التحديث).

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

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