الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

MySQL والصلاحيات، هل أستطيع أن أخفي بيانات معينة!

مغلق
بدأه حسام الملحم في 22 أبريل 2006 · 6 رد · 1,644 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،،

عندي جدول العملاء مثلا،، الاستعلام البسيط هو

SELECT * FROM Customers

سترجع لي جميع البيانات المتعلقة بالعملاء.

هل يمكن أن أجعل بعض العملاء غير ظاهرين حسب الصلاحية،،

مثلا الصلاحية: مستخدم عادي،،، وأريد أن أخفي العميل رقم 123 عن هذا المستخدم.. فكيف أصنع ذلك؟

بفرض أنه استعلم باستخدام الاستعلام السابق،، أريد ألا يظهر العميل رقم 123 في النتائج..

أرجو أن يكون السؤال واضحا!

تم تعديل هذه المشاركة بواسطة حسام الملحم أبومازن في 22 أبريل 2006 في 16:27

#2
اقتباس
هل يمكن أن أجعل بعض العملاء غير ظاهرين حسب الصلاحية،،

مثلا الصلاحية: مستخدم عادي،،، وأريد أن أخفي العميل رقم 123 عن هذا المستخدم.. فكيف أصنع ذلك؟

بفرض أنه استعلم باستخدام الاستعلام السابق،، أريد ألا يظهر العميل رقم 123 في النتائج..

هذه طريقة :

لو أنشات حقلا في جدول العملاء ليكون foreign key من جدول الصلاحيات، بحيث يحتفظ بقيمة أعلى صلاحية مستخدم يمكنه الاطلاع على هذا السجل، وفي الاستعلام تضع شرطا أن يكون صلاحية المستخدم أعلى من قيمة حقل الصلاحية للسجل ليظهر ضمن السجلات المسترجعة التي يمكن للمستخدم رؤيتها.

فكر بطريقة أخرى

#3

شكرا على الرد،،

على فرض أني اتبعت فكرتك،

عندي قاعدة بيانات، سيستخدمها الكثير من المستخدمين،، افرض أنهم سيستخدمون MySQL مباشرة،، كيف أستطيع إجبارهم على قراءة فقط البيانات التي تحوي اسم صلاحياتهم.

يعني مثلا:

SELECT * FROM custormer;

يجب أن يرمي خطأ،

ولكن:

SELECT * FROM CUSTOMER WHERE user="walcom";

ينفذ فقط إذا كان walcom هو المستخدم الفعلي.

فكيف أنفذ هذه الأمر؟

#4

تضيف في كل جدول تريد بياناته تعرض على حسب صلاحيات الزائر حقل يحدد مستوى الترخيص الذي تعطيه لبيانات الصف

مثلا: في جدول users الخاص بالأعضاء أضف حقل وسمه level يعني مستوى الترخيص

ثم ليكن عندنا العضو " أحمد " واعطيته الترخيص رقم 5 ويعني مثلاً أنه مشرف فإن أحمد يطلع على كل الأعضاء الذين هم يحملون الترخيص 4 أو أقل في العبارة التالية :

SELECT * FROM users WHERE (level<5);

إن شاء الله الفكرة بسيطة وواضحة

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#5

شكرا أبو محمد على هذه المساعدة...

لكن يبدو أني لم أكن واضحا،،،

أحمد هو المشرف وعماد هو الموظف صاحب الصلاحية 4،

يستطيع عماد أن يدخل باسمه على MySQL باستخدام اسمه ورقمه السري، وعندها ينادي على:

SELECT * FROM CUSTOMER;
OR
SELECT * FROM CUSTOMER WHERE (level>0);

وعندها سيرى جميع البيانات..

----------

لاحظ الفرضية: المستخدم سوف يستعمل MySQL باستخدام اسمه وقمه السري مباشرة، وكل مستخدم يجب أن يكون عنده صلاحية معينة خاصة به.

#6

أأأممممممم((((افرض أنهم سيستخدمون MySQL مباشرة)))

لا ، لا تجعل المستخدمين يتصلون بـ MySQL مباشرة هذه (نصيحة) لأنه ينطوي على مخاطر أمنية كبيرة وذلك لأنها بحالتها الراهنة لا تحتوي على Triggers قوية ممكن تتحكم بصلاحيات المستخدمين على حسب ما أعلم لأن Triggers إنما أدخلت عليها في الإصدارة الـ 5.0.2 يعني متأخرة.

نعم في MySQL تستطيع التعديل على تراخيص المستخدمين ولكنها ليست بالتفصيل الذي تريده .

بالأمر GRANT تسطيع إضافة مستخدم ويالصلاحيات التي تريدها وهذه الصلاحيات تحدد الجداول التي تريده أن يصل إليها ونوع الوصول (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GANT, REFERENES, INDEX , ALTER) ولكن كمما ترى لا تستطيع الترخيص على مستوى الصف .

وكذلك على مستوى الحقل تستطيع الترخيص بما يلي (SELECT, INSERT, UPDATE, REFERENCES)

وهذا مفيد ولكن سؤالك على مستوى الصف وهذا لا بد فيه من ( Triggers ) وفيها ما فيها ، والله أعلم .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#7

معك حق،، وقد سألت في منتديات MySQL،، واكتشفت أن الطريقة الأفضل هي عدم إعطاء صلاحية بأي مستخدم على أي من الجداول أو أي أوامر استعلام! واتخاذ بدلا منها الأوامر المخزنة أو Stored Procedures! وعندها أستطيع معرفة المستخدم وأتحكم في طلباته،، لكن المشكلة أن الأوامر المخزنة موجودة فقط في MySQL 5!! وأنا عندي 4.1!!

http://forums.mysql.com/read.php?10,91332,91332#msg-91332

هذا الموضوع مغلق.

مواضيع مشابهة