PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

डेटाबेस को जोड़ने के लिए दी गई भूमिका को नहीं छोड़ सकता

REASSIGN . का उपयोग करते समय कुछ बहुत ही सहज अनुमति संबंधी आवश्यकताएं होती हैं ।

मैंने पाया है कि जब एक सुपरयूज़र खाता उपलब्ध नहीं होता है (जैसा कि आरडीएस या क्लाउड एसक्यूएल के मामले में होता है) तो मुझे अपनी वर्तमान भूमिका को लक्ष्य भूमिका प्रदान करनी होती है ताकि लक्ष्य भूमिका से स्वामित्व वाली वस्तुओं को पुन:असाइन या ड्रॉप किया जा सके। उदाहरण के लिए, यदि मेरा सक्रिय उपयोगकर्ता postsgres . है , और मैं user_a . को हटाने का प्रयास कर रहा हूं :

> DROP OWNED BY user_a
ERROR:  permission denied to drop objects
> GRANT user_a TO postgres;
GRANT ROLE
> DROP OWNED BY user_a;
DROP OWNED

अब, यह थोड़ा पेचीदा हो जाता है यदि user_a postgres . का सदस्य होता है , खासकर यदि यह किसी अन्य भूमिका के माध्यम से उस सदस्यता को प्राप्त करने के लिए होता है, तो चलिए इसे schema_admin कहते हैं ...

> DROP OWNED BY user_a
ERROR:  permission denied to drop objects
> GRANT user_a TO postgres;
ERROR:  role "user_a" is a member of role "postgres"

-- Alright, let's try to revoke it...
> REVOKE postgres FROM user_a;
REVOKE ROLE
> GRANT user_a TO postgres;
ERROR:  role "user_a" is a member of role "postgres"

-- It's still a member through the inherited grant - trying to revoke again doesn't work:
> REVOKE postgres FROM user_a;
WARNING:  role "user_a" is not a member of role "postgres"
REVOKE ROLE

-- So you have to identify the role it's inheriting from, and revoke that:
> REVOKE schema_admin FROM user_a;
REVOKE ROLE
> GRANT user_a TO postgres;
GRANT ROLE

-- Now just to be safe, I'll reassign owned objects before actually dropping everything:
> REASSIGN OWNED BY user_a TO postgres;
REASSIGN OWNED
> DROP OWNED BY user_a;
DROP OWNED
> DROP ROLE user_a;
DROP ROLE;

वोइला!

नोट:यहां एक और व्यापक रूप से संदर्भित और प्रभावी उत्तर है:https://sysadmintips.com/services/databases/postgresql-error-permission-denied-to-reassign-objects/ जो तब तक बढ़िया काम करता है, जब तक आप एक नए अस्थायी उपयोगकर्ता के रूप में बनाने और लॉग इन करने में सक्षम होते हैं। हालांकि, कुछ संदर्भों में, यह अपने आप में एक समस्या है (और फिर आपके पास उस अस्थायी भूमिका को समाप्त करने के लिए अतिरिक्त सफाई भी है), इसलिए मैंने इसे यहां से बचने की कोशिश की।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में संख्या प्रकार के रूप में अंतराल को माइक्रोसेकंड में बदलें?

  2. Snomed Postgres Sql Database से संबंध कैसे खोजें

  3. Postgres में अद्यतन के लिए DELETE से वापसी मूल्य का उपयोग करना

  4. Mac OSX Lion Postgres /tmp/.s.PGSQL.5432 पर कनेक्शन स्वीकार नहीं करता है

  5. त्रुटि:संबंध स्थान मौजूद नहीं है हरोकू डीबी आयात