الانتقال إلى المحتوى

كيف يتم تحديد صلاحيات مستخدمي هذا النظام


أسماء محمد

Recommended Posts

السلام عليكم اخواني
بداية انا عاوزة اشرح تكوين الداتابيز عندي
عشان تتضح المشكلة او الموضوع
انا باستخدم APPLICATION USERS
ومش DATABASE USERS
كل سنة عندي يوزر علي الداتابيز وده اللي عليه كل الشغل
يعني لو من سنة 2000
عندي 13 يوزر فالداتابيز
لان كم البيانات مش صغير فاضطرينا نفصل كل سنة عن الاخري فبمجرد ما تخلص السنة
بنعمل يوزر جديد وبنرحل فيه الارصدة الافتتاحية للمخازن والحسابات
لو انا عاوزة اغير برنامجي من APPLICATION USERS
الي DATABASE USERS
كيف يتم ذلك مع العلم اني لما قرات الطريقة
وجدت مثلا ان لما اعمل يوزر جديد لمستخدم علي الداتابيز طبعا بيكون فاضي مافيش فيه اي شيئ
لازم اعمل SYNONYMS
للجداول فلو افترضنا فالسنة الحالية عندي جدول EMP
وجيت اعمل له SYNONYMS
هاختار السنة 2013
الجدول EMP
اسم SYNONYMS=EMP

طيب عاوزة ادي كمان الصلاحية علي 2012
هاختار السنة 2012
الجدول EMP
اسم SYNONYMS=EMP
طبع هيديلي الايرور ده
ORA-00955: name is already used by an existing object

وفي نفس الحالة انا مش هاقدر اخلية مختلف لان اصلا الشاشة واحدة مش باعمل لكل سنة شاشة مختلفة يا ريت يكون الموضوع واضح شكرا

تم تعديل بواسطة أسماء محمد
رابط هذا التعليق
شارك

السلام عليكم
اعملي Public Synonym وسيتم عملها مره واحده فقط:

Create Or Replace Public Synonym <Synonym_Name> For <Object_Name>

رابط هذا التعليق
شارك

السلام عليكم
شكرا لحضرتك علي الرد
ولكن انا مش فاهمة حضرتك
لاني عاملة PUBLIC
اصلا ما بينفعش يتكرر الاسم
باختصار مشكلتي تاني
عاوزة شاشة الموظفين
اقدر افتحها من خلال السنتين
ايه هيه الطريقة اللي ادي ليوزر س الصلاحية عليهم
ارجو كتابة الاكواد
.............................................................
السنة الاولي اسم اليوزر Y12
السنة الثانية Y13
واسم الجدول
EMP
والمستخدم الجديد اللي عاوزه اديله صلاحيات
USR
شكرا

رابط هذا التعليق
شارك

السلام عليكم
اذا كان المطلوب اظهار حركات سنة 2012 يجيب ان يكون الجدول على البلوك كالتالي: Y12.Emp
واذا كان المطلوب اظهار حركات سنة 2013 يجيب ان يكون الجدول على البلوك كالتالي: Y13.Emp

ولكن اذا تم عمل Public Synonym على الجدول يكفي ان تكتبي اسم الجدول فقط على البلوك في الشاشة وسيظهر جميع البيانات.
بالاضافة لعمل Grant على الجدول مثل Select, Inset....إلخ.

وأنصح بأن يتم دمجهم في يوزر واحد وزياده حجم الـ Table space.

رابط هذا التعليق
شارك


السلام عليكم
اذا كان المطلوب اظهار حركات سنة 2012 يجيب ان يكون الجدول على البلوك كالتالي: Y12.Emp
واذا كان المطلوب اظهار حركات سنة 2013 يجيب ان يكون الجدول على البلوك كالتالي: Y13.Emp

ولكن اذا تم عمل Public Synonym على الجدول يكفي ان تكتبي اسم الجدول فقط على البلوك في الشاشة وسيظهر جميع البيانات.
بالاضافة لعمل Grant على الجدول مثل Select, Inset....إلخ.

وأنصح بأن يتم دمجهم في يوزر واحد وزياده حجم الـ Table space.



شاكرة حضرتك جدا علي سرعة الرد ولكن
اولا انا باعتقد ان هيكون فيه صعوبة اني اخلي بيانات 13 سنة علي يوزر واحد كمان لازم اغير ال strucure
بتاع الجداول كلها واضيف حقل السنة year
لانه اصلا مش فال key يعني من غير كده هيكون فيه duplicate
وكتير حاجات هتتغير شاشات وعلاقات وتقارير وحكاية كبيرة
ثانيا انا عاملة شاشة واحد اسمها شاشة الموظفين والداتابلوك تابل اسمه emp
يبقي لو دخل المستخدم علي 2013
هيجيب بيانات 2013
ولو دخل 2012 او اي سنة هيجيب بياناتها او بالاحرى بيانات جدول الemp
في الي سنة وده المطلوب
يبقي مش مفروض اني اسجل اسم اليوزر مع اسم الجدول فالداتابلوك
وكمان ده هيكون استاتيك
حضرتك لما بتيجي تعمل Public Synonym
اعتقد انك لازم تحدد اولا علي اي يوزر يعني فحالتي علي اي سنة
وبعدين علي اي جدول
ولو عملته مرة مش هتقدر تعمله علي السنين التانية بنفس الاسم

اسفة للتطويل
ولكن الموضوع ده شغلني مع اني شغالة ك application users
كويس ولكن حبيت اشارك اراء الاخوة
شكرا تم تعديل بواسطة أسماء محمد
رابط هذا التعليق
شارك

اوك لكي أوضح لك كلامي:

نفرض انه لديك User A و User B.


يجب إنشاء Synonyms وانتي بداخل User A ونفس السكريبت نفذيه وانتي بداخل User B:

Select 'create synonym '||Table_Name||' for a.'||Table_Name||';' From User_Tables;



بعد العملية السابقة يجب عمل Grant:


For X In (Select * From User_Tables)
Loop
 Execute Immediate 'GRANT ALL ON A.' || X.Table_Name || ' TO B';
End Loop;



بعد تنفيذ الكود السابق كل صلاحيات الموجوده على User A صارت موجوده على User B.

بالتوفيق.

رابط هذا التعليق
شارك


اوك لكي أوضح لك كلامي:

نفرض انه لديك User A و User B.


يجب إنشاء Synonyms وانتي بداخل User A ونفس السكريبت نفذيه وانتي بداخل User B:

Select 'create synonym '||Table_Name||' for a.'||Table_Name||';' From User_Tables;



بعد العملية السابقة يجب عمل Grant:


For X In (Select * From User_Tables)
Loop
Execute Immediate 'GRANT ALL ON A.' || X.Table_Name || ' TO B';
End Loop;



بعد تنفيذ الكود السابق كل صلاحيات الموجوده على User A صارت موجوده على User B.

بالتوفيق.




شاكرة جدا استاذنا الكريم وجاري التجربة
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية