2011-10-05 10 views
5

देने मानक SQL का उपयोग करने के बाद एक विशेषाधिकार को निरस्त कर मैं user1 के लिए, एक सामान्य विशेषाधिकार

grant select on schema1.* to user1; 
revoke select on schema1.users from user1; 
secret छोड़कर schema1 में सभी तालिकाओं के लिए एक चयन प्रदान करना चाहते हैं

ERROR 1147 (42000): There is no such grant defined for user 'user1' on host '%' on table 'secret' 

क्या मैं गलत कर रहा हूँ:

त्रुटि प्राप्त?


जाहिर है यह मानक MySQL व्यवहार है !!

MySQL का उपयोग कर ऐप्स में सुरक्षा परिष्कार की कमी को समझना आसान बनाता है - MySQL में सही उपयोगकर्ता सुरक्षा सेट अप करना बेहद मुश्किल है।

+1

आपको प्रत्येक तालिका, तालिका द्वारा तालिका के लिए चयन विशेषाधिकार देना चाहिए। – Devart

+0

क्या आप वाकई हैं? एएनएसआई मानक कहता है कि मैं जो कर रहा हूं वह सही है। –

उत्तर

5

कुछ भी नहीं। MySQL व्यक्तिगत टेबल पर schema1.* वाइल्डकार्ड का विस्तार नहीं करता है, न ही यह "अपवाद" संग्रहीत करता है। अनुमति तालिकाएं अनुमत अनुमतियां संग्रहीत करती हैं। इसलिए, चूंकि आपने वास्तव में schema1.users पर कुछ भी नहीं दिया है, इसलिए MySQL को निरस्त करने के लिए कुछ भी नहीं है। यह सिर्फ नीचे आता है कि MySQL अनुमतियों को कैसे संभालता है।

+0

तो MySQL में अनुदान/REVOKE _not_ ANSI मानक है? –

+1

शायद @ccyoung। मैं मानक से परिचित नहीं हूँ। मुझे पता है कि कई अन्य जगहें हैं जहां MySQL विचलित हो जाता है, इसलिए यह मुझे आश्चर्य नहीं करेगा। मैं माईएसक्यूएल टीम के साथ एक बग खोलने का सुझाव दूंगा (यह संभवतया पहले से मौजूद है), लेकिन यह भी सुझाव देगा कि जब तक इसे संबोधित नहीं किया जाता है तब तक प्रमुख जीवन निर्णय न दें। हम कोर माईएसक्यूएल के बारे में बात कर रहे हैं जो कई सालों से (इंटरनेट समय में सदियों) है। कभी भी बदला जा रहा है संभावनाएं किसी के लिए पतली नहीं हैं। – Mac

संबंधित मुद्दे