postgresql 角色權限


概要

postgresql 默認的賬戶 postgres 權限太高, 當一個數據庫服務上有多個項目的數據庫時, 大家都通過 postgres 賬戶來連接數據庫安全性太差.

最好的方式是, 每個數據庫有自己的賬戶, 該賬戶只能查看特定的數據庫, 無法訪問其他數據庫.

最近有幾個項目, 開發時都是直接用 postgres 賬戶, 發布時, 由於安全性的要求, 無法再使用此帳戶.
因此, 需要創建新的不同帳戶來連接不同的數據庫, 調整過程中遇到的一些坑記錄如下:

數據庫切換角色

重新創建數據庫

這種情況, 一般是因為之前直接把表創建在了默認的 postgres 數據庫中了.
這是, 需要創建新的數據庫和帳戶, 並把數據遷移到新的數據庫.

1  # 創建新賬戶
2  CREATE USER testuser WITH PASSWORD 'testpasswd';
3  
4  # 創建新數據庫並將 OWNER 設置為新創建的帳戶
5  CREATE DATABASE testdb OWNER testuser;
6  
7  # 給新用戶授權
8  GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

創建數據庫之后, 接着使用上面創建的 testuser 來創建 schematable
這樣, testuser 就有了對這些 schematable 訪問的權限

已有數據庫

對於已有的數據庫, 其中的 schematable 之前是用 postgres 帳戶創建的.
這時, 先給新建的賬戶賦予數據庫權限

1  # 創建新賬戶
2  CREATE USER testuser WITH PASSWORD 'testpasswd';
3  
4  # 將數據庫 OWNER 設置為新創建的帳戶
5  ALTER DATABASE testdb OWNER TO testuser;
6  
7  # 給新用戶授權
8  GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

雖然給 testuser 賬戶賦予了數據庫層的所有權限, 但是對其中的 schematable, 仍然沒有權限.
需要針對 schematable 再次授權

1  # 賦予用戶schema的權限
2  GRANT ALL PRIVILEGES ON SCHEMA illuminant TO testuser;
3  
4  # 賦予schema下所有表的權限 
5  GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA illuminant TO testuser;

這樣, 就可以用新賬戶訪問新數據庫了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM