我正在嘗試爲我正在處理的應用創建受限制的數據庫用戶,並且希望刪除用於實驗的Postgres數據庫用戶。有沒有辦法讓用戶不必手動撤銷所有權限,或撤銷用戶擁有的所有權限?PostgreSQL - 如何快速刪除具有現有權限的用戶
回答
如何
DROP USER <username>
這實際上是DROP ROLE
的別名。
您必須明確地刪除與該用戶關聯的所有特權,並將其所有權移至其他角色(或刪除該對象)。
這最好通過
REASSIGN OWNED BY <olduser> TO <newuser>
和
DROP OWNED BY <olduser>
後者實現將刪除授予該用戶的任何特權。
查看本文的DROP ROLE和the more detailed description的postgres文檔。
增加:
顯然,試圖通過這裏提到的命令,如果您正在執行他們,而被連接到原來的贈款,由相同的數據庫才起作用刪除用戶,這裏討論:
另外請注意,如果您已明確授予:
CONNECT ON DATABASE xxx TO GROUP
,
,你將需要從DROP歸單獨撤銷這一點,使用:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
我面臨同樣的問題,現在找到了一種方法來解決它。 首先你必須刪除你想刪除的用戶的數據庫。然後用戶可以很容易地刪除。
我創建了一個名爲「msf」的用戶,並掙扎了一段時間來刪除用戶並重新創建它。我遵循以下步驟,併成功。
1)刪除數據庫
dropdb msf
2)刪除用戶
dropuser msf
現在,我得到了用戶成功刪除。
這是一種令人難以置信的斜線和刻錄方法,因爲它會要求我爲每次迭代工作重新創建數據庫模式。 (其中涉及對現有數據庫模式具有精細權限;即最好如果數據庫模式保持不變)。 – millimoose 2015-12-09 22:54:08
接受的答案在嘗試重新分配所有權或所有權時會導致錯誤。以下爲我工作:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM username;
DROP USER username;
用戶可以在其他模式的特權,在這種情況下,你必須運行與「公」用正確的模式替換適當REVOKE線。要顯示所有的模式和特權類型的用戶,我編輯\ DP命令,使這個查詢:
SELECT
n.nspname as "Schema",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'S' THEN 'sequence'
WHEN 'f' THEN 'foreign table'
END as "Type"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%username%';
我不知道哪些權限類型對應撤銷對錶,序列,或功能,但我認爲它們都屬於三者之一。
- 1. 具有特定權限的Postgresql用戶
- 2. 如何刪除用戶的「CreateDB」權限?
- 3. 具有權限的角色,但也添加/刪除個人用戶的權限
- 4. 如何限制快速應用程序中的用戶權限?
- 5. 不允許具有管理權限的用戶執行postgresql
- 6. 公用文件夾刪除所有用戶的所有權限
- 7. TFS2012權限:我如何刪除用戶?
- 8. 如何刪除PostgreSQL中具有有效引用鍵的行
- 9. 如何創建具有LDAP限制權限的LDAP用戶
- 10. 具有根權限的用戶
- 11. htaccess的用戶具有不同權限
- 12. 有限的備份權postgresql
- 13. 如何用xCode快速刪除所有未使用的變量?
- 14. 具有有限管理權限的MySQL用戶
- 15. 創建具有有限權限的db用戶
- 16. powershell刪除特定用戶的文件夾的所有權限
- 17. 顯示具有具體用戶的所有權限[Postgres]
- 18. 爲表格創建具有刪除權限的用戶非數據庫
- 19. 如何使用WebTest模擬具有特定權限的用戶
- 20. 在所有子目錄中刪除用戶的NTFS權限
- 21. 刪除用戶的權限(django)
- 22. 的Facebook SDK - 刪除用戶權限
- 23. 如何給函數創建/刪除/變更/執行權限,而createing PostgreSQL用戶
- 24. Braintree,如何從客戶端刪除具有現時的用戶信用卡?
- 25. 如何創建具有權限的linux用戶
- 26. 如何使用SubInAcl.exe刪除目錄的所有繼承權限?
- 27. 發現用戶是否具有管理權限
- 28. 具有有限權限的WSHShell.ExpandEnvironmentStrings
- 29. 獲取哪些用戶具有管理員權限的帳戶(具有OAuthV2訪問權限)的API是什麼?
- 30. 如何爲Postgresql中的所有數據庫創建具有隻讀權限的用戶?
正在操作: CREATE TABLE foo(bar SERIAL); ALTER TABLE foo所有者postgres; CREATE USER testuser; GRANT ALL foo TO testuser; DROP USER testuser' 給出了錯誤消息:'錯誤:角色「testuser」不能被刪除,因爲一些對象依賴於它。細節:訪問表foo'。 但是,'testopenned by testuser'完成了這個伎倆,顯然Postgres認爲授予是可丟棄的對象。 – millimoose 2010-06-14 10:39:09
請澄清一下@Tim Kane和millimoose:如果我選擇FOO給TESTUSER,然後DROP OWNED BY TESTUSER,我真的不希望原始表被刪除。我想你說的是DROP OWNED BY只是放棄了贈款,但不會放棄授予的目標。正確? – 2014-12-01 13:53:36
Andrew,最好閱讀說明文檔。 DROP OWNED BY *將*刪除該用戶擁有的表。 REASSIGN OWNED BY會將這些表格重新分配給不同的用戶。選一個。 – 2015-02-09 09:16:53