Saya telah menjalankan SQL berikut di 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
);
Ketika saya masuk sebagai bspu
, dan mencoba untuk menanyakan users
tabel, saya mendapatkan kesalahan:
permission denied for relation users
Saya mencoba berlari:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Tapi itu tidak membantu. Apa yang saya lakukan salah? Mengapa pemilik basis data TIDAK memiliki izin untuk melakukan kueri terhadap database sendiri?
EDIT: Saya ditingkatkan bspu
ke superuser untuk saat ini, sehingga saya dapat terus bekerja. Bimbingan lebih lanjut dihargai.
postgresql
permissions
jika __name__ Tidak Ada
sumber
sumber
\dt "users"
pertunjukan?SELECT session_user, current_user
bagian atas skrip Anda? Dan apa versi Postgres Anda?Jawaban:
DEFAULT PRIVILEGES
jangan tidak mengubah izin untuk ada objek. Mereka adalah hak default untuk objek yang baru dibuat dan hanya untuk peran tertentu yang mereka miliki. Jika Anda tidak mendefinisikan peran saat berjalanALTER DEFAULT PRIVILEGES
, itu default ke peran saat ini (saat menjalankanALTER DEFAULT PRIVILEGES
pernyataan.Juga, karena Anda menggunakan
serial
kolom, yang menciptakanSEQUENCE
, Anda juga ingin mengatur hak default untuk urutan.Jalankan ini pada pengguna yang Anda buat objek dengan, sebelum Anda menjalankan
CREATE
perintah:Jika Anda harus menggunakan pgAdmin, kata hati-hati. Ada bug dalam versi saat ini 1,20 (atau lebih tua) pada tampilan skrip SQL engineered terbalik
DEFAULT PRIVILEGES
. Layar mengabaikan pengguna yang memiliki dan oleh karena itu salah dalam situasi tertentu. Saya melaporkan bug, masalah ini tertunda .Untuk objek yang sudah ada, Anda mungkin tertarik dengan bentuk
GRANT
perintah "batch" ini :Lebih lanjut di bawah pertanyaan terkait ini di SO:
sumber
sumber