2016-07-26 84 views
-1

雖然當前連接是db1,但我想要更改db2上的權限。像:如何在GRANT命令中指定數據庫名稱?

GRANT ALL PRIVILEGES ON SCHEMA "db2"."public" TO "user"; 

但是這會導致錯誤,並且PostgreSQL無法識別語句中的數據庫限定符!有沒有什麼辦法可以做到這一點,而無需從db1斷開連接並重新連接到db2?

順便說一句,我正在從編程語言開始這些命令,而不是psql

[更新]

正如我在評論中說,似乎這個功能刻意封鎖(由於執行方面的挑戰或安全原因 - 我不知道)。

無論如何,我沒有看到一個很好的理由,那是我的個人意見。如果難以實施,那麼這是一個設計缺陷。我認爲安全性問題很容易被破壞,因爲爲已經通過身份驗證和授權的用戶添加流程步驟並不被認爲是更好的安全措施。

再次,只是我的意見。

無論如何,我非常感謝PostgreSQL項目所付出的所有時間和精力。多謝你們。

+3

您無法授予其他數據庫的權限。您需要先連接到該數據庫。 –

+0

@a_horse_with_no_name這不荒唐!? – Mehran

+0

爲什麼這應該是荒謬的?這就是Postgres的工作原理。 –

回答

1

首先,我不知道這是出於意圖還是缺乏實現,但這是PostgreSQL中的一個長期行爲。沒有跨數據庫引用。目前有很多原因可能永遠不會存在,特別是難以使系統目錄正常工作的困難。基本上,數據庫A不知道數據庫中的結構B。其次,PostgreSQL中的跨數據庫信息共享也有點不一致。 pg_locks(出於某種奇怪的原因)顯示所有數據庫。所以我認爲這可能是一種有機發展,而不是人們坐下來就此制定政策。同樣,如您所知,角色和用戶是集羣全局的。所以我可以看到爲什麼這看起來有點不一致。

在PostgreSQL中執行此操作的正確方法是連接到您想要管理權限的數據庫。目前沒有其他方式可以使PostgreSQL訪問相應的商品並修改它們,並且更改可能會如此突破,以至於我認爲這不可能發生。

相關問題