لماذا لا يوجد دور قاعدة بيانات "الإجراء المنفذ" المخزن؟

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

سؤال

لطالما تساءلت لماذا قائمة أدوار قاعدة البيانات (db_datareader, db_datawriter, db_ddladmin, ، إلخ) لم تتضمن أبدا db_storedprocedureexecutor. الآخرون منطقيون ، لكن يبدو أنه قادر على منح القدرة على تنفيذ جميع بروكس المخزنة لمستخدم معين (دون منحها db_owner, ، وهي الطريقة الأخرى الوحيدة لإنجاز نفس الشيء) ستكون شيئًا مفيدًا.

على سبيل المثال ، لنفترض أنني أريد أن أعطي جميع مطوريي الحقوق في تشغيل الإجراءات المخزنة ، بينما لا تسمح لهم بتنفيذ أي DDL - دون منح التنفيذ بشكل صريح على كل إجراء مخزن (ثم تذكر إضافة الإجراءات الجديدة عند نشر SPS إضافية) ، لا توجد طريقة للقيام بذلك (أعرف أن SPS يمكن أن تحتوي على DDL ، لذلك قد لا يزال مسموحًا له بشكل غير مباشر بالوصول إلى DDL بهذه الطريقة).

إذا كان لدي حساب خدمة تطبيق وعدد من الإجراءات المخزنة التي تتوافق مع طلبي ، فيجب علي منح الحقوق بشكل صريح لكل SP (لأنني لا أرغب في منح حساب خدمة الطلب DBO) ، بينما يمكنني استخدام ملف دور للسماح لهم بتحديث/حذف أي شيء يريدون.

على الرغم من أن الأمر بدا واضحًا في البداية ، إلا أنني لست متأكدًا الآن من سبب فقد هذا الدور من خادم قاعدة البيانات - هل يمكن لأي شخص تقديم شرح لسبب أن هذه فكرة فظيعة (كما أفترض ، أو أنها ستكون موجودة بالفعل)؟

تعديل:

يبدو أنني لست الوحيد في هذا التوقع - و إنه يعمل مع حفنة من T-SQL (يبدو أنه يمكنك منح تنفيذ بطانية بشكل صحيح ، وهو ما لم أكن أدرك أنه يمكنك القيام به) ، الأمر الذي يتركني أتساءل عن سبب عدم قياسي!

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

المحلول

إذا كنت تستخدم المخططات ، فعليك فقط ذلك GRANT EXECUTE ON SCHEMA::storedprocschema

على سبيل المثال CREATE PROC storedprocschema.DoStuff ...

لماذا ، لا فكرة ...

نصائح أخرى

لأنه إذا كنت تستطيع تنفيذ جميع الإجراءات المخزنة ، فيمكنك التنفيذ sp_addrolemember, ، ويمكنك أن تفعل كل ما database_owner يستطيع.

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