Psql භාවිතා කරමින් දත්ත සමුදා වරප්‍රසාද ලැයිස්තුගත කරන්න


170

මම සිටින්නේ දත්ත සමුදා සේවාදායක සංක්‍රමණයක මැද වන අතර මට (ගූගල් කර සෙවීමෙන් පසු) psqlවිධාන රේඛා මෙවලම භාවිතා කර PostgreSQL හි දත්ත සමුදා වරප්‍රසාද (හෝ සේවාදායකය පුරා ඇති සියලුම වරප්‍රසාද) ලැයිස්තුගත කරන්නේ කෙසේද?

මම උබුන්ටු 11.04 හි සිටින අතර මගේ PostgreSQL අනුවාදය 8.2.x.

Answers:


137
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

වරප්‍රසාද පිළිබඳ ලේඛනය ප්‍රතිදානය අර්ථ නිරූපණය කරන්නේ කෙසේද යන්න පිළිබඳ පැහැදිලි කිරීමක් ලබා දෙයි. වත්මන් දත්ත සමුදායේ වගුවක නිශ්චිත වරප්‍රසාද සඳහා, භාවිතා කරන්න \z myTable.


7
\z myTableඔබ යමෙකුට සාර්ථකව ප්‍රවේශය ලබා දී ඇති බව සහතික කිරීම සහ මෝඩයෙකු ලෙස
පෙනීම

130

සමහර විට ඔබ අදහස් කරන්නේ දත්ත සමුදායක් සඳහා පරිශීලකයින් සහ ඔවුන්ගේ වරප්‍රසාද ලැයිස්තුගත කිරීමයි - මට ප්‍රශ්නයෙන් තරමක් කිව නොහැක:

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 l විධානය සමඟ ලැයිස්තුගත කර ඇත. කෙසේ වෙතත් ඉතා ස්තූතියි.
pedrosanta

98

පහත දැක්වෙන පරිදි ඔබට එය කළ හැකිය:

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
වෙබ් අඩවියට සාදරයෙන් පිළිගනිමු! එක් කුඩා ප්‍රශ්නයක්: ඔබ ප්‍රතිදානය තිර රුවක් ලෙස ඇතුළත් කළේ ඇයි? කරුණාකර සාමාන්‍ය පෙළ හැකි සෑම විටම භාවිතා කරන්න.
ඩෙසෝ


1
අනුපිළිවෙල සඳහා මට අවසර දැකිය හැකි ක්‍රමයක් තිබේද? මෙය ලබා දෙන්නේ වගු තොරතුරු පමණි
විමසිලිමත්

(අවම වශයෙන් Postgres 9.4 යටතේ) ඉහත සඳහන් දෑ ද්‍රව්‍යමය අදහස් සඳහා ක්‍රියා නොකරන බව සලකන්න.
SeldomNeedy

@ හිමාන්ෂුචවුහාන් මම 'මයිල් රීඩර්' භූමිකාව භාවිතා කරමින් 'නව_රෝල්' නව භූමිකාවක් එකතු කළහොත්, තොරතුරු_චෙමා.රෝල්_ටේබල්_ග්‍රැන්ට්ස් නව_රෝලය ලැයිස්තු ගත කරයිද?
ආනන්ද්

20

භාවිතා 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

ලැයිස්තුව N ට වඩා දිගු වූ විට (අවම වශයෙන් 9.3 කින්), වරප්‍රසාද ලැයිස්තුවක් සහිත අනතුරු ඇඟවීම බිඳ වැටී ඇත, නමුත් ඔබට එය තවමත් ල logs ු-සටහන් වලින් සොයාගත හැකිය ...


13

රහස් psql ඔබ \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;

මෙය වර්ග ප්‍රමිතියක්ද?
රිබමර්

දෝෂය: තීරුව r.rolbypassrls නොපවතී \ n \ n ලයින් 9:, r.rolbypassrls \ n \ n ^ \ n ",` අවාසනාවකට ක්‍රියා නොකරයි
රිබමර්

10

(සමහර විට පැහැදිලිව පෙනෙන) අතිරේක පියවරක් පෝස්ට්ග්‍රෙස් පරිශීලකයා බවට පත්වේ, එසේ නොමැතිනම් ඔබට නොපවතින භූමිකාවන් පිළිබඳ දෝෂ ඇතිවිය හැකිය.

sudo su - postgres
psql -l

හෝ

psql
postgres=> \l

3
මෙටා: මම මෙය එකතු කරන්නේ ගූගල් විමසුම "පෝස්ට්ග්‍රෙස් ලැයිස්තු භූමිකාවන්" මත ඉහළින්ම ශ්‍රේණිගත කර ඇති නිසා සහ මට අවශ්‍ය දේ සොයා ගැනීමට පෙර මම අඩු ශ්‍රේණිගත ප්‍රති results ල සඳහා ටිකක් කාලය ගත කළ නිසා අමතර තොරතුරු අනුස්මරණය කරමි.
ඇඩම් ෂොස්ටැක්

0

මෙම ප්‍රශ්නයට පිළිතුරු කිහිපයකින් සමන්විත මගේ විමසුම මෙයයි:

SELECT grantee AS user, CONCAT(table_schema, '.', table_name) AS table, 
    CASE 
        WHEN COUNT(privilege_type) = 7 THEN 'ALL'
        ELSE ARRAY_TO_STRING(ARRAY_AGG(privilege_type), ', ')
    END AS grants
FROM information_schema.role_table_grants
GROUP BY table_name, table_schema, grantee;

මෙහි ප්‍රති results ලය මේ වගේ දෙයක්:

+------+--------------+----------------+
| user |    table     |     grants     |
+------+--------------+----------------+
| foo  | schema.table | ALL            |
| bar  | schema.table | SELECT, INSERT |
+------+--------------+----------------+

-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.