İlişki için izin reddedildi


330

Basit sql komutunu çalıştırmayı denedim:

select * from site_adzone;

ve bu hatayı aldım

ERROR:  permission denied for relation site_adzone

burdaki problem ne olabilir?

Ayrıca diğer tablolar için seçim yapmaya çalıştım ve aynı sorunu var. Ayrıca bunu yapmaya çalıştım:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

ama bu yanıtı konsoldan aldım

WARNING:  no privileges were granted for "jerry"

Neyin yanlış olabileceği hakkında bir fikrin var mı?


DB okuma / yazma böylece izinleri güncellemek için emin değilim
Boban


2
SO hoş geldiniz! Bu soru için, dba.stackexchange.com adresinden daha fazla yardım alabilirsiniz, ancak çok sayıda gizli yorum bulabilirsiniz :)
Jared Beck

10
Affedersiniz. Bu, bu gece konu dışı olarak gördüğüm ikinci çok programlama ile ilgili postgresql sorusu! Sonuncusu 67.000 kez görüntülendi, bu 30.000 kez görüntülendi. Bir popülerlik cümlesine sahip olmalıyız: Konuyla ilgili> 15.000 görünümden fazla olan öznel olmayan herhangi bir soru.
Theodore R. Smith

1
Bu soru konu dışı değil! Bununla birlikte, stackoverflow.com/questions/13497352/… 'nin
wheaties

Yanıtlar:


391

Veritabanında GRANT ihtiyacınız olan şey değildir. Doğrudan masalara verin.

Veritabanına ayrıcalıklar vermek çoğunlukla bağlantı ayrıcalıklarını vermek veya iptal etmek için kullanılır. Bu, yeterli başka izinleri varsa veritabanında kimlerin şeyler yapabileceğini belirlemenizi sağlar.

Bunun yerine:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

Bu, bu konuyla ilgilenecektir.


7
postgres gibi bir süper kullanıcı olarak çalıştırın.
Chris Travers

19
Bu bir şekilde kısayol olabilir mi? TÜM TABLOLARA TÜM AYRICALIKLARI VERMEK Mİ?
Shadur

196
@Shadur JEM'DE halka açık SCHEMA'DA TÜM TABLOLARDA TÜM AYRINTILARI VERİN;
Ron E

10
@RonE, şu anki veritabanıyla sınırlı mı?
Shadur

7
@zmiftah ihtiyacınız olan şema için> SCHEMA adına TÜM AYRINTILARI VERİNSchema TO user;
Pierozi

241

Ron E cevabını başkalarına faydalı olabileceğinden tüm tablolara ayrıcalık tanınması için göndermek.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

21
Ayrıca için de benzer komut çalıştırmak gerekebilir ALL SEQUENCESve ALL FUNCTIONS.
Pistos

7
Merak edenler için: ALL TABLESgörüşleri de içerir, bu yüzden ayrı bir ALL VIEWSkomut yoktur :-)
André Gasser

74

Önce doğru veritabanına bağlanın , ardından çalıştırın:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

4
doğru veritabanına bağlanma sayesinde daha önce yapmıyorum oldu!
17:10, asgs

15
sağ veritabanına bağlanma BÜYÜK bir dufference yapar :)\connect databasename;
Denis Matafonov

3
BU. Baştan beri "postgres" e bağlandım. Teşekkür ederim!
Andrew

2
Evet DB bağlanmak fark
yarattı

44
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

Bu anwser benim günümü kurtardı!
anhtran

19

1. ve önemli adım db'nize bağlanmaktır:

psql -d yourDBName

2 adım, ayrıcalık tanımak

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

18

Şemada varolan tüm tablolara izin vermek için şunu kullanın:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

İlerideki tablolara uygulanacak varsayılan izinleri belirtmek için şunu kullanın:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

Örneğin

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

SERIALVeya BIGSERIALsütun kullanırsanız , muhtemelen aynı şeyi yapmak isteyeceksiniz SEQUENCES, aksi INSERTtakdirde başarısız olursunuz ( Postgres 10'larIDENTITY bu sorundan muzdarip değildir ve SERIALtürler üzerinde önerilir ), yani

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

Ayrıca , daha fazla ayrıntı ve yeniden kullanılabilir komut dosyası için Web Uygulaması için PostgreSQL İzinlerine verdiğim cevaba bakın .

Ref:

HİBE

ALTER VARSAYILAN AYRICALIKLAR


9

Bu, sık sık bir tablo kullanıcı postgres olarak oluşturmak ve sonra sıradan bir kullanıcı olarak erişmeye çalıştığınızda olur. Bu durumda, postgres kullanıcısı olarak oturum açmak ve tablonun sahipliğini komutla değiştirmek en iyisidir:

alter table <TABLE> owner to <USER>;

5

Psql'de tabloların sahibi olarak oturum açtığınızdan emin olun. tabloların kimin kullandığını bulmak için\dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

o zaman HİBELERİ çalıştırabilirsiniz


0

Belirli izinleri ararken, tüm ayrıcalıklardan ziyade yalnızca seçme izni vermenizi öneririm. Bunu şu şekilde yapabilirsiniz:

GRANT SELECT ON <table> TO <role>;

0

Malısın:

  1. postgres kullanıcısı ile DBeaver aracılığıyla veritabanına bağlanma
  2. sol sekmede veritabanınızı açın
  3. Roller sekmesini / açılır menüsünü aç
  4. kullanıcısını seç
  5. sağ sekmede 'İzinler sekmesine' basın
  6. şema sekmenize basın
  7. tablolar sekmesine / açılır menüsüne basın
  8. tüm tabloları seç
  9. gerekli tüm izinler onay kutularını seçin (veya Tümünü Ver'e basın)
  10. Kaydet'e basın

-3

Bu sorunla bir kez karşılaştım. veritabanı kullanıcısını bir süper kullanıcı olarak değiştirin ve sorununuz çözüldü.

SUPERUSER İLE ALTER KULLANICI kullanıcısı;


Bunu yaparak, ihtiyacınız olandan daha fazla primler veriyorsunuz. Süper kullanıcı, diğer kullanıcıların, veritabanlarının vb.
Santi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.