سؤال

أنا طالب في الدراسات الجامعية ، وأنا أواجه مشكلة ضئيلة في منح حقوق الملكية للمستخدم A إلى إجراء مخزن يمتلكه المستخدم B في وضع قاعدة البيانات Oracle 10G = XE.

الرجاء مساعدتي في كتابة أوامر SQL لمنح حقوق الملكية على الإجراء المخزن XYZ لمستخدم آخر A.

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

المحلول

لست متأكدًا من أنني أفهم ما تعنيه "حقوق الملكية".

إذا كان المستخدم B يمتلك إجراءً مخزنًا ، يمكن للمستخدم B منح المستخدم إذنًا لتشغيل الإجراء المخزن

GRANT EXECUTE ON b.procedure_name TO a

يقوم المستخدم A بعد ذلك بالاتصال بالإجراء باستخدام الاسم المؤهل تمامًا ، أي

BEGIN
  b.procedure_name( <<list of parameters>> );
END;

بالتناوب ، يمكن للمستخدم A إنشاء مرادف لتجنب الاضطرار إلى استخدام اسم الإجراء المؤهل بالكامل.

CREATE SYNONYM procedure_name FOR b.procedure_name;

BEGIN
  procedure_name( <<list of parameters>> );
END;

نصائح أخرى

لا يمكنك فعل ما أعتقد أنك تطلب القيام به.

الامتيازات الوحيدة التي يمكنك منحها على الإجراءات هي تنفيذ وتصحيح.

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

تعديل:

كما ذكر جاستن ، طريقة لإعطاء حقوق التنفيذ لإجراءات مملوكة ل B:

GRANT EXECUTE ON b.procedure_name TO a;

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

لذلك إذا قمت بالاتصال بحزمة تنشئ مستخدمًا على سبيل المثال ، فإن مالك الحزمة ، وليس مستخدم الاتصال الذي يحتاج إلى إنشاء امتياز المستخدم. يحتاج المتصل فقط إلى تنفيذ إذن على الحزمة.

إذا كنت تفضل تشغيل الحزمة باستخدام أذونات مستخدم الاتصال ، فعند إنشاء الحزمة ، تحتاج إلى تحديد Authid Current_user

توثيق Oracle "حقوق Invoker مقابل حقوق Defere" لديها المزيد من المعلومات http://docs.oracle.com/cd/a97630_01/appdev.920/a96624/08_subs.htm#18575

أتمنى أن يساعدك هذا.

على حساب DBA الخاص بك ، امنح UserB الحق في إنشاء إجراء باستخدام المنحة grant create any procedure to USERB

سوف ينظر الإجراء

CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE
--Must add the line below
AUTHID CURRENT_USER AS
  BEGIN
  --DO SOMETHING HERE
  END
END

GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA

أعلم أن هذا سؤال قديم جدًا ولكني آمل أن أتمكن من تصحيحه قليلاً.

SQL> grant create any procedure to testdb;

هذا أمر عندما نريد إعطاء امتياز للمستخدم "TestDB".

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