Bagaimana tentang
DROP USER <username>
Ini sebenarnya adalah alias untuk DROP ROLE
.
Anda harus secara jelas melepaskan hak istimewa yang terkait dengan pengguna tersebut, juga untuk memindahkan kepemilikannya ke peran lain (atau melepaskan objek).
Ini paling baik dicapai oleh
REASSIGN OWNED BY <olduser> TO <newuser>
dan
DROP OWNED BY <olduser>
Yang terakhir akan menghapus hak istimewa yang diberikan kepada pengguna.
Lihat dokumen postgres untuk DROP ROLE dan penjelasan lebih rinci tentang ini.
Tambahan:
Rupanya, mencoba untuk menjatuhkan pengguna dengan menggunakan perintah yang disebutkan di sini hanya akan berfungsi jika Anda menjalankannya saat terhubung ke database yang sama dengan mana GRANTS asli dibuat, seperti yang dibahas di sini:
https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuser
memberikan pesan kesalahan:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
. Namun, setelahDROP OWNED BY testuser
melakukan triknya, ternyata Postgres menganggap hibah sebagai objek yang bisa dijatuhkan.Jawaban yang diterima mengakibatkan kesalahan bagi saya saat mencoba REASSIGN OWNED BY atau DROP OWNED BY. Yang berikut berhasil untuk saya:
Pengguna mungkin memiliki hak istimewa di skema lain, dalam hal ini Anda harus menjalankan baris REVOKE yang sesuai dengan "publik" diganti dengan skema yang benar. Untuk menampilkan semua skema dan jenis hak istimewa untuk pengguna, saya mengedit perintah \ dp untuk membuat kueri ini:
Saya tidak yakin jenis hak istimewa mana yang sesuai dengan pencabutan di TABEL, URUTAN, atau FUNGSI, tapi menurut saya semuanya termasuk dalam salah satu dari tiga.
sumber
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;
revoke USAGE on SCHEMA some_schema from username;
Perhatikan juga, jika Anda telah secara eksplisit memberikan:
CONNECT ON DATABASE xxx TO GROUP
,Anda harus mencabut ini secara terpisah dari DROP OWNED BY, menggunakan:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
sumber
Saya harus menambahkan satu baris lagi ke REVOKE ...
Setelah berlari:
Saya masih menerima kesalahan: nama pengguna tidak dapat dihapus karena beberapa objek bergantung padanya DETAIL: hak istimewa untuk skema publik
Saya melewatkan ini:
Kemudian saya bisa menghentikan peran itu.
sumber
Inilah yang akhirnya berhasil untuk saya:
sumber
Tidak ada
REVOKE ALL PRIVILEGES ON ALL VIEWS
, jadi saya akhiri dengan:dan biasa:
agar berikut ini berhasil:
sumber
Di baris perintah, ada perintah yang
dropuser
tersedia untuk melakukan drop user dari postgres.sumber
Saya menghadapi masalah yang sama dan sekarang menemukan cara untuk menyelesaikannya. Pertama, Anda harus menghapus database pengguna yang ingin Anda hapus. Kemudian pengguna dapat dengan mudah dihapus.
Saya membuat pengguna bernama "msf" dan berjuang beberapa saat untuk menghapus pengguna dan membuatnya kembali. Saya mengikuti langkah-langkah di bawah ini dan berhasil.
1) Jatuhkan database
2) jatuhkan pengguna
Sekarang saya berhasil menjatuhkan pengguna.
sumber