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

पता करें कि क्या उपयोगकर्ता को PostgreSQL में एक टेबल/फ़ंक्शन/... को चुनने/अपडेट करने/... का चयन करने की अनुमति मिली है

मैंने पाया है कि एक बेहतर दृष्टिकोण (और मुझे याद है कि यह psql, या शायद info_schema विचारों में निर्मित कुछ प्रश्नों से लिया गया था) has_*_privilege का उपयोग करना है फ़ंक्शन, और बस उन्हें उपयोगकर्ता और ऑब्जेक्ट के सभी संभावित संयोजनों के एक सेट पर लागू करें। यह किसी समूह भूमिका के माध्यम से किसी वस्तु तक पहुंच होने पर भी ध्यान देगा।

उदाहरण के लिए, यह दिखाएगा कि किन उपयोगकर्ताओं के पास गैर-कैटलॉग तालिकाओं और दृश्यों तक पहुंच है:

select usename, nspname || '.' || relname as relation,
       case relkind when 'r' then 'TABLE' when 'v' then 'VIEW' end as relation_type,
       priv
from pg_class join pg_namespace on pg_namespace.oid = pg_class.relnamespace,
     pg_user,
     (values('SELECT', 1),('INSERT', 2),('UPDATE', 3),('DELETE', 4)) privs(priv, privorder)
where relkind in ('r', 'v')
      and has_table_privilege(pg_user.usesysid, pg_class.oid, priv)
      and not (nspname ~ '^pg_' or nspname = 'information_schema')
order by 2, 1, 3, privorder;

संभावित विशेषाधिकार has_*_privilege . के विवरण में विस्तृत हैं http://www पर कार्य करता है .postgresql.org/docs/current/static/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE

'CREATE TEMP' एक डेटाबेस-स्तरीय विशेषाधिकार है:यह उपयोगकर्ता को pg_temp_* का उपयोग करने की अनुमति देता है स्कीमा। इसका परीक्षण has_database_privilege(useroid, datoid, 'TEMP') के साथ किया जा सकता है ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं फ्लोट ::इन्फिनिटी को स्वीकार करने के लिए रूबी रेंज के .. और ... ऑपरेटरों को कैसे ओवरराइड कर सकता हूं?

  2. पोस्टग्रेज में अंतिम सम्मिलित सीरियल आईडी चुनें/प्रदर्शित करें

  3. रेक निरस्त! त्रुटि:डेटाबेस का स्वामी होना चाहिए

  4. Postgresql SELECT क्वेरी में उपयोग की गई सभी तालिकाओं की सूची प्राप्त करें

  5. Ubuntu 16.04 पर PostgreSQL 10 को स्थापित और कनेक्ट करें