2012-02-12 20 views
7

मेरे पास 3 भूमिकाएं हैं: सुपरसियर, पावरुसर और उपयोगकर्ता। मेरे पास टेबल "डेटा" है और डेटा_select और data_insert कार्य करता है।postgresql 9.1 - कार्यों के माध्यम से एक्सेस टेबल

अब मैं परिभाषित करना चाहता हूं कि केवल सुपरसियर तालिका "डेटा" तक पहुंच सकता है। पावरसर और उपयोगकर्ता सीधे "डेटा" तालिका तक नहीं पहुंच सकते हैं, लेकिन केवल कार्यों के माध्यम से।

उपयोगकर्ता केवल फ़ंक्शन डेटा_सेलेक्ट चला सकता है, Poweruser डेटा_select और data_insert दोनों चला सकता है।

तो मैं उपयोगकर्ताओं को ऐलिस, बॉब, ... बना सकता हूं और उन्हें उपयोगकर्ता या पाउउसर के विशेषाधिकार प्राप्त कर सकता है।

क्या यह वास्तव में प्राप्त करने योग्य है? मैं दूसरे दिन इस के साथ लड़ रहा हूं और कहीं भी नहीं जा रहा हूं।

अपने समय के लिए धन्यवाद।

उत्तर

8

हां, यह करने योग्य है।

"सुपरसियर" डिफ़ॉल्ट रूप से वास्तविक superuser, postgres हो सकता है। मैं सादा उपयोगकर्ताओं के लिए usr पर भूमिका का नाम बदलता हूं, क्योंकि user एक आरक्षित शब्द है - इसे पहचानकर्ता के रूप में उपयोग न करें।

CREATE ROLE usr; 
CREATE ROLE poweruser; 
GRANT usr TO poweruser; -- poweruser can do everything usr can. 

CREATE ROLE bob PASSWORD <password>; 
GRANT poweruser TO bob; 

CREATE ROLE alice PASSWORD <password>; 
GRANT usr TO alice; 

REVOKE ALL ON SCHEMA x FROM public; 
GRANT USAGE ON SCHEMA x TO usr; 

REVOKE ALL ON TABLE x FROM public; 
REVOKE ALL ON TABLE y FROM public; 

CREATE FUNCTION 
    ... 
SECURITY DEFINER; 

REVOKE ALL ON FUNCTION ... FROM public; 
GRANT EXECUTE ON FUNCTION a TO usr; 
GRANT EXECUTE ON FUNCTION b TO poweruser; 

या आप फ़ंक्शन के स्वामित्व के लिए लॉगिन के बिना डेमॉन भूमिकाएं बना सकते हैं और तालिका पर संबंधित अधिकार रख सकते हैं। यह और भी सुरक्षित होगा।

यदि आप इस मार्ग पर जा रहे हैं, तो आप प्यारALTER DEFAULT PRIVILEGES (PostgreSQL 9.0 के साथ पेश किया गया) होगा। More details in this related answer

मैनुअल में अध्याय Writing SECURITY DEFINER Functions Safely पढ़ें।

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

  • कोई संबंधित समस्या नहीं^_^