2010-01-26 9 views
9

मैं PostgreSQL के साथ एक बहुत ही कष्टप्रद भूमिका विरासत मुद्दा में भाग गया। यह व्यवहार नहीं करता है क्योंकि यह documentation के अनुसार होना चाहिए।PostgreSQL भूमिका विरासत काम नहीं कर रहा है?

मैं एक मास्टर भूमिका निभाना चाहता हूं, और नए बनाए गए उपयोगकर्ताओं को इसकी अनुमति देना चाहता हूं। इन उपयोगकर्ताओं को मैन्युअल रूप से SET ROLE जारी किए बिना अनुमतियों का उत्तराधिकारी होना चाहिए।

CREATE ROLE testrole NOSUPERUSER INHERIT CREATEDB NOCREATEROLE; 
CREATE ROLE testuser LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; 
GRANT testrole TO testuser; 

अब के बाद मैं testuser के रूप में कनेक्ट करते हैं, मैं निम्नलिखित मिलती है: (इनहेरिट विकल्प की वजह से) ऊपर लिंक डॉक्स के अनुसार

postgres=> CREATE DATABASE foobar; 
ERROR: permission denied to create database 
postgres=> SET ROLE testrole; 
SET 
postgres=> CREATE DATABASE foobar; 
CREATE DATABASE 

, SET ROLE की आवश्यकता नहीं किया जाना चाहिए।

मुझे यहां क्या याद आ रही है?

उत्तर

18

एक ही पृष्ठ में और नीचे यह है कि:।

"भूमिका लॉगिन, SuperUser, CREATEDB, और CREATEROLE के रूप में विशेष विशेषाधिकार के बारे में सोचा जा सकता है जिम्मेदार बताते हैं, लेकिन वे डेटाबेस वस्तुओं पर साधारण विशेषाधिकार के रूप में विरासत में मिला है कभी नहीं कर रहे हैं आप कर रहे हैं वास्तव में विशेषता का उपयोग करने के लिए इन विशेषताओं में से एक होने वाली एक विशिष्ट भूमिका के लिए ROLE ROLE को अवश्य करना चाहिए। "

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