منح الحقوق في الإجراء المخزن لمستخدم آخر من أوراكل
-
29-09-2019 - |
سؤال
أنا طالب في الدراسات الجامعية ، وأنا أواجه مشكلة ضئيلة في منح حقوق الملكية للمستخدم 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".