2009-12-10 10 views
5

हमारे उपयोगकर्ता डेटाबेस स्तर पर दिए गए SELECT के साथ, काफी कम-स्तरीय उपयोगकर्ता के रूप में उत्पादन डेटाबेस में लॉग इन करते हैं, और उन विशिष्ट तालिकाओं पर दिए गए INSERT/UPDATE/DELETE को एक्सेस करने की आवश्यकता होती है।क्या MySQL में अस्थायी तालिकाओं को अनुमतियां असाइन करने का कोई बेहतर तरीका है?

उनके पास अस्थायी तालिकाओं को बनाने की अनुमति भी है (हमें कुछ और जटिल प्रश्नों के लिए उनकी आवश्यकता है)। समस्या यह है कि जब तक वे अस्थायी तालिकाओं को बना सकते हैं, उनके पास INSERT तक पहुंच नहीं है!

हमने जो काम किया है वह एक ही नाम की एक "असली" (लगातार?) तालिका बनाना है (लेकिन केवल एक फ़ील्ड के साथ) और उसमें डालने के लिए उनके लिए पहुंच प्रदान करना है। फिर, जब एक ही नाम के साथ अस्थायी तालिका बनाई जाती है, तो सिस्टम उस तालिका का उपयोग करेगा, न कि लगातार तालिका।

mysql> CREATE TEMPORARY TABLE `testing` (`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30)); 
Query OK, 0 rows affected (0.04 sec) 
mysql> INSERT INTO `testing` (`name`) VALUES ('testing'); 
ERROR 1142 (42000): INSERT command denied to user 'stduser'@'office.companyname.co.uk' for table 'testing' 

आप (रूट के रूप में, एक और सत्र में) तालिका को पहुंच प्रदान करने की कोशिश करते हैं, तो आप नहीं कर सकते: हम सम्मिलित प्रदान कर सकते हैं

mysql> GRANT INSERT ON testdb.testing TO 'stduser'@'%'; 
ERROR 1146 (42S02): Table 'testdb.testing' doesn't exist 

तो मेरी सवाल है, मूल रूप से,/अपडेट/उसी नाम की "लगातार" तालिका के बिना अस्थायी तालिकाओं पर हटा दें?

उत्तर

5

MySQL reference के अनुसार:

MySQL डेटाबेस या तालिकाओं जो अस्तित्व में नहीं करना पर विशेषाधिकार देने के लिए सक्षम बनाता है। तालिकाओं के लिए, के विशेषाधिकारों को प्रदान किया जाना चाहिए जिसमें विशेषाधिकार शामिल होना चाहिए।

तो, उपरोक्त अनुदान विवरण पर CREATE अनुमति शामिल करने का प्रयास करें।

+0

मैंने अभी परीक्षण वातावरण पर यह कोशिश की है, और आप वास्तव में सही हैं! शर्म की बिट आपको रचना देना है (न केवल टेम्पलेट टेबल बनाएं), लेकिन आपको बहुत धन्यवाद। – Drarok

1

MySQL अनुदान वस्तु वास्तव में मौजूदा से स्वतंत्र हैं - आप टेबल जो (अभी तक) नहीं है पर दे सकते हैं मौजूद हैं और उन अनुमतियों एक मेज को निर्दिष्ट किया जाएगा अगर यह बनाई जानी थी। इसका मतलब है कि आप एक विशिष्ट तालिका बनाने के लिए उपयोगकर्ता अनुमति दे सकते हैं।

मैं केवल temp तालिकाओं के लिए डेटाबेस बनाने के लिए लुभाना चाहता हूं, (कहा जाता है, कहें, temp) और उपयोगकर्ताओं को उस डेटाबेस तक पहुंच प्रदान करता हूं। प्रति-ऑब्जेक्ट वाले लोगों की तुलना में डेटाबेस-आधारित अनुमतियां प्रबंधित करना बहुत आसान होती है।

+0

"MySQL अनुदान वास्तव में मौजूद वस्तु से स्वतंत्र हैं - आप उन टेबलों को प्रदान कर सकते हैं जो अभी तक मौजूद नहीं हैं और उन अनुमतियों को तालिका में असाइन किया जाएगा यदि इसे बनाया जाना था।" मुझे विश्वास नहीं है कि मामला होने के लिए, उपरोक्त त्रुटि 1146 देखें। – Drarok

4

इसके आस-पास एक तरीका एक विशेष डेटाबेस बनाना होगा और उपयोगकर्ता को इसके लिए पहुंच लिखना होगा, और उसके बाद यह उस विशेष डेटाबेस में उन अस्थायी तालिकाओं को बनाएगा।

+0

यह अन्य कामकाजों के साथ मदद करता है जैसे अस्थायी तालिकाओं को फिर से खोलना, आप वास्तविक बना सकते हैं – KCD