পিএসকিএল ব্যবহার করে ডাটাবেস সুবিধাগুলি তালিকাবদ্ধ করুন


142

আমি একটি ডাটাবেস সার্ভার মাইগ্রেশনের মাঝখানে আছি এবং আমি অঙ্ক করতে পারি না (এখানে গুগলিং এবং অনুসন্ধানের পরে) কীভাবে psqlকমান্ড লাইন সরঞ্জামটি ব্যবহার করে 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আপনি সফলভাবে কারও অ্যাক্সেস মঞ্জুর করেছেন এবং আপনি যখন বলছেন "ঠিক আছে এখন এটি কাজ করে? তাই না ??? "
আইজোসফ

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 কমান্ডের সাথে তালিকাভুক্ত রয়েছে। তবে যাইহোক খুব ধন্যবাদ।
পেদ্রোসন্ত

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 এর অধীনে) উপরোক্ত বস্তুগত দর্শনের জন্য কাজ করবে না।
সেলডমনিডি

@ হিমাংশুচৌহান যদি আমি 'মেইল রিডার' ভূমিকাটি ব্যবহার করে 'নতুন_রোল' যোগ করি তবে তথ্য_চেমা.রোল_সারণযোগ্য_গ্রন্থগুলিও নতুন_রোলকে তালিকাবদ্ধ করবে?
আনন্দ

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কমান্ড দেওয়ার সময় বেলো কোয়েরি ব্যবহার করে ।

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;

এই বর্গ স্ট্যান্ডার্ড?
ribamar

E "ত্রুটি: কলাম r.rolbypassrls অস্তিত্ব নেই \ n LINE nLINE 9:, r.rolbypassrls \ n \ n ^ \ n", `দুর্ভাগ্যক্রমে কাজ করে না
ribamar

10

একটি (সম্ভবত সুস্পষ্ট) অতিরিক্ত পদক্ষেপটি পোস্টগ্রিজ ব্যবহারকারী হয়ে উঠেছে, অন্যথায় আপনি উপস্থিত না থাকা ভূমিকা সম্পর্কে ত্রুটি পেতে পারেন।

sudo su - postgres
psql -l

অথবা

psql
postgres=> \l

2
মেটা: আমি এটি যুক্ত করছি কারণ এই প্রশ্নটি গুগল ক্যোয়ারিতে "পোস্টগ্রিস তালিকার ভূমিকাগুলি" তে অত্যন্ত রেট দেওয়া হয়েছে এবং আমি যা চেয়েছিলাম তা খুঁজে পাওয়ার আগে আমি অনেক নিচু স্থানে ফলাফলের জন্য কিছুটা সময় ব্যয় করেছি, তাই আমি অতিরিক্ত তথ্য স্মরণে করছি।
অ্যাডাম শস্ট্যাক

-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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.