हाँ, यह संभव है।
"सुपरयूज़र" एक वास्तविक 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
(पोस्टग्रेएसक्यूएल 9.0 के साथ पेश किया गया)। इस संबंधित उत्तर में अधिक विवरण
।
अध्याय पढ़ें लेखन SECURITY DEFINER
सुरक्षित रूप से कार्य करता है
मैनुअल में।