概要
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 來創建 schema 和 table
這樣, testuser 就有了對這些 schema 和 table 訪問的權限
已有數據庫
對於已有的數據庫, 其中的 schema 和 table 之前是用 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 賬戶賦予了數據庫層的所有權限, 但是對其中的 schema 和 table, 仍然沒有權限.
需要針對 schema 和 table 再次授權
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;
這樣, 就可以用新賬戶訪問新數據庫了.