<table> ilişkisi için izin reddedildi


12

Ben psql aşağıdaki SQL koştu:

CREATE USER bspu LOGIN;

CREATE DATABASE bsp OWNER bspu;

GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;

\c bsp

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  client_id VARCHAR(20) NOT NULL,
  api_key VARCHAR(100) NOT NULL,
  api_secret VARCHAR(100) NOT NULL,
  auth_token VARCHAR(128) NOT NULL
);

Olarak oturum açtığınızda bspuve userstablo sorgulamaya çalıştığınızda , hatayı alıyorum:

permission denied for relation users

Koşmayı denedim:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;

Ama yardımcı olmuyor. Neyi yanlış yapıyorum? Neden veritabanı sahibinin kendi veritabanını sorgulama izni YOKTUR?

EDIT: bspuŞimdilik süper kullanıcı sürümüne geçtim , böylece çalışmaya devam edebiliyorum. Başka rehberlik takdir.


\dt "users"Gösterinin çıktısı ne ?
bma

@bma sadece ana acc listelenir.
__name__ ise

İlk komutları hangi kullanıcı olarak çalıştırdınız? SELECT session_user, current_userSenaryonuzun üst kısmından ne alıyorsunuz ? Postgres sürümünüz nedir?
Erwin Brandstetter

Bunlar tam olarak çalıştırdığınız komutlarsa, yine de 'ana acc'unuzla bağlantı halindesiniz. Böylece hangi ayrıcalıklara sahip olduğunuz ortaya çıkıyor. Aksi takdirde, Erwin'in mükemmel cevabına bakın. (Bu hata mesajının hangi rolün izin olmadığını söylemediğini aptal gibi hissettiğimi itiraf edeyim. Örneğin, biri GÜVENLİK TANIMCI ile bir işlevler zinciri çalıştırdığında, kimin kim olduğunu karıştırmak oldukça hızlı.)
dezso

Yanıtlar:


22

DEFAULT PRIVILEGESdo not izinlerini değiştirmek varolan nesneler. Bunlar, yeni oluşturulan nesneler ve yalnızca ait oldukları rol için varsayılan ayrıcalıklardır. Rolü çalışırken tanımlamazsanız, ALTER DEFAULT PRIVILEGESvarsayılan olarak geçerli role ( ALTER DEFAULT PRIVILEGESdeyimi yürütürken) geçer .

Ayrıca, a serialoluşturan bir sütun kullandığınız SEQUENCEiçin, diziler için de varsayılan ayrıcalıklar ayarlamak istersiniz.

Komutu çalıştırmadan önce bunu nesne oluşturduğunuz kullanıcı üzerinde çalıştırın CREATE:

ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON TABLES TO bspu;
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON SEQUENCES TO bspu;

PgAdmin kullanmanız gerekiyorsa, dikkatli olun. Geçerli sürüm 1.20 (veya daha eski) için tersine mühendislik SQL komutunun ekranında bir hata var DEFAULT PRIVILEGES. Ekran sahip olan kullanıcıyı yok sayar ve bu nedenle bazı durumlarda yanlıştır. Hatayı rapor ettim, sorun beklemede .

İçin mevcut nesnelerin de bu "toplu" şeklinde ilginizi çekebilir GRANTkomutu :

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bspu;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bspu;

SO ile ilgili bu soru altında daha fazlası:


1
Böcek bakın pgAdmin4 hala hakimse söz redmine.postgresql.org/issues/4685 bir kopyası olarak işaretlendi, redmine.postgresql.org/issues/4256
dpprdan

-1
This is working for me after some research. psql (9.6.12)

-- login to postgres database server as postgres user.
ssh <user>>@hostname.<domain>>.com
sudo su postgres
id
psql
postgres=# create user sentry_read with login password 'sentry_read';
postgres=# du+
postgres=# \l+
-- **very important: make sure we should connect required database before we grant to user.**
postgres=# \c sentry
postgres=# \dt
sentry=# \dp SENTRY_VERSION
sentry=# select * from "SENTRY_VERSION";
sentry=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO sentry_read;
postgres=# \q

[user@hostname ~]$ psql -U sentry_read -d sentry -h hostname.<domain>>.com -W
sentry=> select * from "SENTRY_VERSION";
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.