2011-04-19 19 views
17

bağlamak nasıl GRANT CONNECT ON DATABASE <database> TO <user> verilmiş olan kullanıcıları görüntülerim?PostgreSQL: Görünüm veritabanı izinleri

dp \
  • - listelerine tablo/görünüm izinleri
  • \ dn + - listeleri şema izinleri
  • l + I dan psql'i kullanıyorum veritabanını
+0

Vay bu soru eski ve hiç bir cevap seçmedim. Sanırım bunun nedeni daha fazla bir şey arıyordum. Buna bir süredir bakmadım, bu yüzden yanlış mı diye özür dilerim. Pg_hba.conf dosyasının, kullanıcıların bir sunucuya bağlanmasına izin verdiğine inanıyorum. Bu nedenle, mümkün olacak kilitli henüz veritabanları '\ L' komutu hiç bilmek mümkün olmayabilir neredeyse izin herkes tarafından erişilmesi. – vol7ron

cevap

0

erişebilirsiniz tüm kullanıcıların listelemiyor \ 8.4 ve postgres 9.0 ve komut \l veya \l+ postgres'dir bana sahip sütunu Access Privileges verir giriş:

<user_name>=c/<database_name> 
Eğer istediği gibi

ve önceki ben kullanıcıya bağlantı ayrıcalığı verdi.

http://www.postgresql.org/docs/9.0/static/sql-grant.html numaralı sayfada belirtildiği gibi, c letter Connect anlamına gelir.

+0

Doğru, ancak tüm kullanıcıları listelemiyor. Bunun bir sınırlama olabileceğini düşünüyorum. Ya da belki de pg_hba.conf bir şeyler yapıyor. – vol7ron

18

Biraz \ l + komut sadece veritabanına bağlanmak için izin/ayrıcalığa sahip kullanıcıların bazı görüntüler ise garip. Kendimi bir PostgreSQL 8.4 kurulumunda tekrarlayamadım (Ubuntu 10.04 LTS). Hangi sürümü kullanıyorsunuz?

SELECT datname as "Relation", datacl as "Access permissions" FROM pg_database WHERE datname = 'databasename'; 

sadece yapabildin bir kullanıcıyı kontrol etmek isterseniz:

Neyse

, belki de kullanıcı doğru ayrıcalıklarına sahip olup olmadığını anlamak o belirli veritabanı için ve bundan ACL'lere tutan tabloyu kontrol edebilir Bunun gibi bir şey yapın:

SELECT * FROM has_database_privilege('username', 'database', 'connect'); 

Açıklamalar/ayrıcalıklar nasıl yorumlanır? ayrıcalıkları böyle okunacak şunlardır:

user = privileges/granted by 

belirtilmemesi kullanıcı KAMU ayrıcalığı, yani bütün rolleri verilir anlamına gelir. Örneğin ayrıcalık =Tc/postgres sonra tüm roller bağlamak ve söz konusu veritabanında geçici tablolar yaratabilir ve bu ayrıcalığı verilmiş postgres kullanıcıysa.

PostgreSQL sitesinde http://www.postgresql.org/docs/9.2/static/sql-grant.html farklı ayrıcalıkları açıklayan PostgreSQL yerinde bir sinopsis yoktur.

rolename=xxxx -- privileges granted to a role 
     =xxxx -- privileges granted to PUBLIC 

      r -- SELECT ("read") 
      w -- UPDATE ("write") 
      a -- INSERT ("append") 
      d -- DELETE 
      D -- TRUNCATE 
      x -- REFERENCES 
      t -- TRIGGER 
      X -- EXECUTE 
      U -- USAGE 
      C -- CREATE 
      c -- CONNECT 
      T -- TEMPORARY 
     arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) 
      * -- grant option for preceding privilege 

     /yyyy -- role that granted this privilege 
+0

John, Buna bakacağım. 8.4 versiyonunda da test ettiğime inanıyorum. Bunu sorgulayabileceğimi düşünüyorum, ama bunu yapmak için bir kısayol komutu olacağını umuyordum. Ne olursa olsun, bunu dikkatimi çeken eşsiz vakayı hatırlayıp hatırlamadığımı görmek zorundayım. – vol7ron

+0

Bu soruyu gördüğümden beri bir süre oldu. 8.4 ve hayır, listede görünmeyen veritabanına erişebilen hesaplar olduğunu biliyorum ...Soru: '= Tc/' içinde eşittir işaretinden önce hiç kullanıcı listelenmediğinde ne anlama gelir? Bu, herkesin geçici bağlantısı olduğu anlamına mı geliyor? – vol7ron

+0

Evet. Bu arada iyi bir soru, cevabı, ayrıcalıkların nasıl yorumlanacağını güncelledim. –