Psql का उपयोग करके डेटाबेस विशेषाधिकारों की सूची बनाएं


142

मैं डेटाबेस सर्वर माइग्रेशन के बीच में हूं और मैं psqlकमांड लाइन टूल का उपयोग करके PostgreSQL पर डेटाबेस विशेषाधिकारों (या सर्वर पर सभी विशेषाधिकार) को कैसे सूचीबद्ध कर सकता हूं (यहां खोज करने के बाद) समझ नहीं सकता हूं ?

मैं Ubuntu 11.04 पर हूं और मेरा PostgreSQL संस्करण 8.2.x है।

जवाबों:


116
postgres=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres

पर डॉक्सGRANT कैसे आउटपुट की व्याख्या करने के लिए स्पष्टीकरण दे। वर्तमान डेटाबेस की एक तालिका पर विशिष्ट विशेषाधिकारों के लिए, का उपयोग करें \z myTable


5
\z myTableयह सुनिश्चित करने के लिए एकदम सही है कि आपने किसी को सफलतापूर्वक पहुंच प्रदान की है और जब आप कहते हैं कि एक बेवकूफ की तरह दिखने से बचना है, "ठीक है अब यह काम करता है? यह नहीं ??? "
ijoseph

107

शायद आप डेटाबेस के लिए उपयोगकर्ताओं और उनके विशेषाधिकारों को सूचीबद्ध करने का मतलब है - मैं इस सवाल से बिल्कुल नहीं कह सकता:

postgres=> \du
                             List of roles
    Role name    |  Attributes  |                    Member of
-----------------+--------------+------------------------------------------------
 dba             | Create role  | {util_user,helpdesk_user,helpdesk_admin}
 helpdesk_admin  | Cannot login | {helpdesk_user}
 helpdesk_user   | Cannot login | {helpdesk_reader}
 jack            |              | {helpdesk_admin}
 postgres        | Superuser    | {}
                 : Create role
                 : Create DB

नहीं, मैं एक विशिष्ट डेटाबेस के विशेषाधिकारों को सूचीबद्ध करने का एक तरीका चाहता था, लेकिन मैंने पहले ही यह समझ लिया था। डेटाबेस के मालिक के पास हमेशा सभी विशेषाधिकार हैं, है ना? और बाद में हम डेटाबेस पर अन्य उपयोगकर्ताओं / समूहों के लिए अधिक विशेषाधिकार जोड़ सकते हैं। वे \ l कमांड के साथ सूचीबद्ध हैं। लेकिन वैसे भी बहुत धन्यवाद।
पेड्रोसांता १anta

80

आप निम्नलिखित करके ऐसा कर सकते हैं:

SELECT grantee, privilege_type 
FROM information_schema.role_table_grants 
WHERE table_name='mytable'

यह आपको इस तरह का आउटपुट देता है:

mail=# select grantee, privilege_type from information_schema.role_table_grants where table_name='aliases';
   grantee    |  privilege_type
--------------+-----------------
 mailreader   |  INSERT
 mailreader   |  SELECT
 mailreader   |  UPDATE
 mailreader   |  DELETE
 mailreader   |  TRUNCATE
 mailreader   |  REFERENCES
 mailreader   |  TRIGGER
(7 rows)

mail=#

10
साइट पर आपका स्वागत है! एक छोटा प्रश्न: आपने स्क्रीनशॉट के रूप में आउटपुट क्यों डाला? जितनी बार संभव हो सामान्य पाठ का उपयोग करें।
dezso


1
क्या कोई ऐसा तरीका है जिसे मैं दृश्यों के लिए अनुमति देख सकता हूं? यह केवल तालिका की जानकारी देता है
जिज्ञासु

ध्यान दें कि (कम से कम Postgres 9.4 के तहत) उपरोक्त भौतिक विचारों के लिए काम नहीं करेगा।
सेलडोमनेडी

@HansanshuChauhan अगर मैं भूमिका 'mailreader' का उपयोग करके एक नई भूमिका 'new_role' जोड़ता हूं, तो क्या info_schema.role_table_grants सूची में new_role भी होगा?
आनंद

15

psqlमेटा-कमांड का उपयोग करना :

https://www.postgresql.org/docs/current/static/app-psql.html

Ctrl + F के साथ पृष्ठ पर जा रहा है:

\ddp [ pattern ] डिफ़ॉल्ट एक्सेस विशेषाधिकार सेटिंग्स को सूचीबद्ध करता है।

\dp [ pattern ] उनके संबंधित एक्सेस विशेषाधिकारों के साथ तालिकाओं, विचारों और दृश्यों को सूचीबद्ध करता है।

\l[+] [ pattern ] डेटाबेस को सर्वर में सूचीबद्ध करें और दिखाएं .... विशेषाधिकार का उपयोग करें।

ऊपर भी उल्लेख किया गया है, लेकिन मैनुअल पेज पर "विशेषाधिकारों" शब्द के साथ नहीं मिला:

\du+लॉगिन के साथ भूमिकाओं के लिए और \dg+बिना भूमिकाओं के लिए - एक दायर की जाएगी "Member of"जहां आप भूमिकाओं के लिए दी गई भूमिका पाते हैं।

मैं जानबूझकर फ़ंक्शन और भाषा विशेषाधिकारों को छोड़ देता हूं, psqlमैनुअल में बमुश्किल हेरफेर के रूप में पाया जाता है (और यदि आप उन विशेषाधिकारों का उपयोग करते हैं जो आप एक सलाह के लिए यहां नहीं आएंगे)। मेटा-कमांड के बाद "+" का उपयोग करने वाले उपयोगकर्ता परिभाषित प्रकारों, डोमेन और इसी तरह के लिए वही लागू होने पर आपको विशेषाधिकार दिखाएगा।


लेन-देन में उपयोगकर्ता को छोड़ने के लिए विशेषाधिकार जाँचने का एक छोटा सा तरीका है, जैसे:

s=# begin; drop user x;
BEGIN
Time: 0.124 ms
ERROR:  role "x" cannot be dropped because some objects depend on it
DETAIL:  privileges for type "SO dT"
privileges for sequence so
privileges for schema bin
privileges for table xx
privileges for table "csTest"
privileges for table tmp_x
privileges for table s1
privileges for table test
Time: 0.211 ms
s=# rollback;
ROLLBACK
Time: 0.150 ms

जब सूची एन की तुलना में लंबी है, (कम से कम 9.3 में), विशेषाधिकारों की सूची के साथ चेतावनी ढह गई है, लेकिन आप अभी भी लॉग में पूर्ण पा सकते हैं ...


12

जब आप \duकमांड जारी करते हैं तो अंडरकवर psq bellow क्वेरी का उपयोग करता है ।

SELECT r.rolname, r.rolsuper, r.rolinherit,
  r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
  r.rolconnlimit, r.rolvaliduntil,
  ARRAY(SELECT b.rolname
        FROM pg_catalog.pg_auth_members m
        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE m.member = r.oid) as memberof
, r.rolreplication
, r.rolbypassrls
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;

क्या यह एसक्यूएल मानक है?
रिबमार

`" त्रुटि: स्तंभ r.rolbypassrls में \ n \ n ऑनलाइन मौजूद नहीं है 9:, r.rolbypassrls \ n \ n ^ \ n ",` दुर्भाग्य से काम नहीं करता है
Ribamar

10

ए (संभवतः स्पष्ट) अतिरिक्त कदम पोस्टग्रैज उपयोगकर्ता बन गया है, अन्यथा आप मौजूदा भूमिकाओं के बारे में त्रुटियां प्राप्त कर सकते हैं।

sudo su - postgres
psql -l

या

psql
postgres=> \l

2
मेटा: मैं इसे जोड़ रहा हूं क्योंकि यह प्रश्न Google क्वेरी "सूची भूमिकाओं को पोस्टग्रेट करता है" पर अत्यधिक मूल्यांकन किया गया है और मैंने जो मुझे चाहिए था, उससे पहले मैंने बहुत कम रैंक वाले परिणामों में थोड़ा समय बिताया, इसलिए मैं अतिरिक्त जानकारी को याद कर रहा हूं।
एडम शॉस्टैक 19

-1
-- file: src/sql/pgsql/list-table-priviledges.sql
-- usage:
-- alias psql="PGPASSWORD=${postgres_db_useradmin_pw:-} psql -v -q -t -X -w -U ${postgres_db_useradmin:-}"
-- psql -d dev_qto < src/sql/pgsql/list-table-priviledges.sql | less
SELECT grantee, table_name , privilege_type
FROM information_schema.role_table_grants
WHERE 1=1
AND grantee = 'usrqtoapp'
AND table_name='readme_doc'
;

-- purpose:
-- list the priveledges per user or for user in a database
-- eof file: src/sql/pgsql/list-table-priviledges.sql

उत्पादन

usrqtoapp | readme_doc | INSERT
usrqtoapp | readme_doc | SELECT
usrqtoapp | readme_doc | UPDATE
usrqtoapp | readme_doc | DELETE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.