لماذا لا يوجد دور قاعدة بيانات "الإجراء المنفذ" المخزن؟
-
27-09-2019 - |
سؤال
لطالما تساءلت لماذا قائمة أدوار قاعدة البيانات (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
يستطيع.