खोज…


वाक्य - विन्यास

  • CREATE ROLE name [ [ WITH ] option [ ... ] ]

  • CREATE USER name [ [ WITH ] option [ ... ] ]

  • where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid

एक पासवर्ड के साथ एक उपयोगकर्ता बनाएँ

आम तौर पर आपको अपने आवेदन में डिफ़ॉल्ट डेटाबेस भूमिका (अक्सर postgres ) का उपयोग करने से बचना चाहिए। आपको इसके बजाय निम्न स्तर के विशेषाधिकार वाला उपयोगकर्ता बनाना चाहिए। यहाँ हम एक अच्छा नाम niceusername और इसे एक पासवर्ड देते हैं very-strong-password

CREATE ROLE niceusername with PASSWORD 'very-strong-password' LOGIN;

इसके साथ समस्या यह है कि psql कंसोल में टाइप किए गए .psql_history हिस्ट्री फाइल में .psql_history जाते हैं। उपयोगकर्ता की होम डायरेक्टरी में .psql_history और पोस्टग्रेएसक्यूएल डेटाबेस सर्वर लॉग में लॉग इन किया जा सकता है, इस प्रकार पासवर्ड को .psql_history किया जा सकता है।

इससे बचने के लिए, उपयोगकर्ता पासवर्ड सेट करने के लिए \password कमांड का उपयोग करें। यदि कमांड जारी करने वाला उपयोगकर्ता सुपरयुसर है, तो वर्तमान पासवर्ड नहीं पूछा जाएगा। (सुपरसर्स के पासवर्ड बदलने के लिए सुपरयुसर होना चाहिए)

CREATE ROLE niceusername with LOGIN;
\password niceusername

रोल और मिलान डेटाबेस बनाएँ

किसी दिए गए एप्लिकेशन का समर्थन करने के लिए, आप अक्सर मिलान करने के लिए एक नई भूमिका और डेटाबेस बनाते हैं।

चलाने के लिए शेल आदेश ये होंगे:

$ createuser -P blogger
Enter password for the new role: ********
Enter it again: ********

$ createdb -O blogger blogger

यह मानता है कि pg_hba.conf को ठीक से कॉन्फ़िगर किया गया है, जो संभवतः इस तरह दिखता है:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    sameuser        all             localhost               md5
local   sameuser        all                                     md5

ग्रांट और रिवोक प्रिविलेज।

मान लीजिए, कि हमारे तीन उपयोगकर्ता हैं:

  1. डेटाबेस के व्यवस्थापक> व्यवस्थापक
  2. उसके डेटा के लिए एक पूर्ण पहुँच के साथ आवेदन> read_write
  3. केवल पढ़ने के लिए पहुँच> read_only
--ACCESS DB
REVOKE CONNECT ON DATABASE nova FROM PUBLIC;
GRANT  CONNECT ON DATABASE nova  TO user;

उपरोक्त प्रश्नों के साथ, अविश्वसनीय उपयोगकर्ता अब डेटाबेस से नहीं जुड़ सकते हैं।

--ACCESS SCHEMA
REVOKE ALL     ON SCHEMA public FROM PUBLIC;
GRANT  USAGE   ON SCHEMA public  TO user;

प्रश्नों का अगला सेट अनधिकृत उपयोगकर्ताओं से सभी विशेषाधिकारों को निरस्त करता है और read_write उपयोगकर्ता के लिए सीमित सेट प्रदान करता है।

--ACCESS TABLES
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC ;
GRANT SELECT                         ON ALL TABLES IN SCHEMA public TO read_only ;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO read_write ;
GRANT ALL                            ON ALL TABLES IN SCHEMA public TO admin ;

--ACCESS SEQUENCES
REVOKE ALL   ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO read_only; -- allows the use of CURRVAL
GRANT UPDATE ON ALL SEQUENCES IN SCHEMA public TO read_write; -- allows the use of NEXTVAL and SETVAL
GRANT USAGE  ON ALL SEQUENCES IN SCHEMA public TO read_write; -- allows the use of CURRVAL and NEXTVAL
GRANT ALL    ON ALL SEQUENCES IN SCHEMA public TO admin;

उपयोगकर्ता का डिफ़ॉल्ट डिफ़ॉल्ट खोज_पथ

नीचे दिए गए आदेशों के साथ, उपयोगकर्ता का डिफ़ॉल्ट search_path सेट किया जा सकता है।

  1. डिफ़ॉल्ट स्कीमा सेट करने से पहले खोज पथ की जाँच करें।
postgres=# \c postgres user1
You are now connected to database "postgres" as user "user1".
postgres=> show search_path;
  search_path   
----------------
 "$user",public
(1 row)
  1. नए स्कीमा my_schema को जोड़ने के लिए alter user कमांड alter user साथ search_path सेट करें
postgres=> \c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# alter user user1 set search_path='my_schema, "$user", public';
ALTER ROLE
  1. निष्पादन के बाद परिणाम की जाँच करें।
postgres=# \c postgres user1
Password for user user1: 
You are now connected to database "postgres" as user "user1".
postgres=> show search_path;
 search_path 
-------------
 my_schema, "$user", public
(1 row)

वैकल्पिक:

postgres=# set role user1;
postgres=# show search_path;
 search_path 
-------------
 my_schema, "$user", public
(1 row)

भविष्य में बनाई गई वस्तुओं पर पहुँच विशेषाधिकार प्रदान करें।

मान लीजिए, कि हमारे three users :

  1. डेटाबेस के admin > admin
  2. उसके डेटा के लिए एक पूर्ण पहुँच के साथ आवेदन> read_write
  3. केवल पढ़ने के लिए पहुँच> read_only

नीचे दिए गए प्रश्नों के साथ, आप निर्दिष्ट स्कीमा में भविष्य में बनाई गई वस्तुओं पर पहुँच विशेषाधिकार सेट कर सकते हैं।

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT                      ON TABLES TO read_only;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO read_write;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT ALL                         ON TABLES TO admin;

या, आप निर्दिष्ट उपयोगकर्ता द्वारा भविष्य में बनाई गई वस्तुओं पर पहुंच विशेषाधिकार सेट कर सकते हैं।

ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT SELECT  ON TABLES TO read_only;

केवल उपयोगकर्ता बनाएँ पढ़ें

CREATE USER readonly WITH ENCRYPTED PASSWORD 'yourpassword';
GRANT CONNECT ON DATABASE <database_name> to readonly;

GRANT USAGE ON SCHEMA public to readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow