Uruchomiłem następujący SQL w psql:
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
);
Gdy loguję się jako bspu
i próbuję users
wysłać zapytanie do tabeli, pojawia się błąd:
permission denied for relation users
Próbowałem uruchomić:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Ale to nie pomaga. Co ja robię źle? Dlaczego właściciel bazy danych NIE ma uprawnień do przeszukiwania własnej bazy danych?
EDYCJA: Na razie uaktualniłem bspu
do superużytkownika, więc mogę kontynuować pracę. Doceniamy wszelkie dalsze wskazówki.
postgresql
permissions
jeśli __name__ to None
źródło
źródło
\dt "users"
pokazuje produkcja?SELECT session_user, current_user
u góry skryptu? A jaka jest twoja wersja Postgres?Odpowiedzi:
DEFAULT PRIVILEGES
czy nie zmienić uprawnienia dla istniejących obiektów. Są to domyślne uprawnienia dla nowo tworzonych obiektów i tylko dla określonej roli, do której należą. Jeśli rola nie zostanie zdefiniowana podczas działaniaALTER DEFAULT PRIVILEGES
, zostanie domyślnie ustawiona na bieżącą rolę (podczas wykonywaniaALTER DEFAULT PRIVILEGES
instrukcji.Ponadto, ponieważ używasz
serial
kolumny, która tworzySEQUENCE
, będziesz chciał również ustawić domyślne uprawnienia dla sekwencji.Uruchom to na użytkowniku, z którym tworzysz obiekty, przed uruchomieniem
CREATE
polecenia:Jeśli powinieneś użyć pgAdmin, słowo ostrzeżenia. W obecnej wersji 1.20 (lub starszej) występuje błąd w wyświetlaniu skryptu SQL dla inżynierii wstecznej
DEFAULT PRIVILEGES
. Wyświetlacz ignoruje właściciela i dlatego w niektórych sytuacjach jest nieprawidłowy. Zgłosiłem błąd, sprawa jest w toku .W przypadku istniejących obiektów możesz być także zainteresowany tą „partią” formularza
GRANT
polecenia :Więcej pod tym powiązanym pytaniem na temat SO:
źródło
źródło