जब एक्सेस विशेषाधिकार \ l द्वारा सूचीबद्ध हैं, और वे कब नहीं हैं? अनुदान द्वारा सूचीबद्ध पहुँच विशेषाधिकार एक अनुदान के बाद बदल सकते हैं और निरस्त कर सकते हैं:
$ createuser -EP my_readonly
$ psql development
development=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------------------+----------+----------+-------------+-------------+-----------------------
development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 |
...
development=# grant usage on schema public to my_readonly;
development=# grant connect on database development to my_readonly;
development=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------------------+----------+----------+-------------+-------------+----------------------------
development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant +
| | | | | vagrant=CTc/vagrant +
| | | | | my_readonly=c/vagrant
...
development=# revoke connect on database development from my_readonly;
REVOKE
development=# revoke usage on schema public from my_readonly;
REVOKE
development=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------------------+----------+----------+-------------+-------------+-----------------------
development | vagrant | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant +
| | | | | vagrant=CTc/vagrant
ऐसा क्यों है? क्या राज्य बदला? मेरा मानना है कि my_readonly उपयोगकर्ता को कनेक्ट करने की क्षमता इस पूरे psql सत्र के माध्यम से अपरिवर्तित थी (क्योंकि मैं अनुमान लगा रहा हूं कि PUBLIC की भूमिका विशेषाधिकारों को जोड़ती है), लेकिन स्पष्ट रूप से कुछ बदल गया: वह चीज क्या है?
साइड प्रश्न: कैसे मैं स्पष्ट रूप से postgres पूछ सकते हैं कि क्या वास्तव में सार्वजनिक करता है कनेक्ट विशेषाधिकार हैं (वे रद्द कर दिया गया हो सकता है - देखना क्यों एक नया उपयोगकर्ता किसी भी तालिका में से चयन कर सकते हैं? )?