如何在 linux 中設置基於使用者的 .psql_history?
如果在 linux 中使用 postgres,它有一個
postgres
使用者。所以當psql
從這個使用者使用時,它會在這個使用者下生成一個.psql_history
文件 - /home/postgres/.psql_history。在 linux 伺服器上設置很多使用者時,他們都想
psql
在他們的會話下使用/home/user1
. 如何讓他們使用psql
並為他們每個人生成 psql 歷史記錄?像這些
- /home/user1/.psql_history
- /home/user2/.psql_history
- /home/…/.psql_history
是否需要為每個使用者安裝 postgres 客戶端?
為每個人創建 unix 使用者帳戶,並在 pg_ident 中設置使用者名映射,以便每個人都作為 postgres 連接。
https://www.postgresql.org/docs/10/auth-username-maps.html
或者為每個帳戶創建單獨的數據庫使用者並為他們提供超級使用者權限。如果您希望 postgres 擁有新的關係,則可以選擇“設置會話身份驗證 postgres”作為啟動操作在 ~/.psqlrc 中設置 - 如果每個人都已經是超級使用者,這並沒有太大的區別。
不是理想的配置
PostgreSQL 的創建使得數據庫內部的權限旨在直接鏡像系統。你可以解決這個問題,它不會太痛苦,但你應該
psql
按照你user1
的user2
例子執行。現在你要求做的是一個特別糟糕的主意。
postgres
不是普通使用者,是超級使用者。這些使用者可以DROP DB
並且隨意TRUNCATE
。您可能不希望共享該帳戶。但是假設您不想授予每個使用者連接到數據庫或創建新數據庫的能力。這並不理想,但如果您想這樣做,有一些機制可以幫助您,儘管受上述警告的影響,我永遠不會與
postgres
使用者共享訪問權限。環境變數
使用
HISTFILE
orPSQL_HISTORY
or 環境變數,歷史文件
將用於儲存歷史列表的文件名。如果未設置,則文件名取自
PSQL_HISTORY
環境變數。如果也未設置,則預設為~/.psql_history
, 或%APPDATA%\postgresql\psql_history
在 Windows 上。例如,把:\set HISTFILE ~/.psql_history- :DBNAME
in
~/.psqlrc
將導致 psql 為每個數據庫維護單獨的歷史記錄。注意:此功能是從 Bash 中無恥地抄襲的。
你可以這樣做
postgres$ SQL_HISTORY="/home/otheruser/.psql" psql
使用須藤
你也可以做
sudo -E
(-E
是--preserve-env
)觀察,❯ sudo -u postgres -- /bin/sh -c "echo ~/.psql_history" /var/lib/postgresql/.psql_history ❯ sudo -E -u postgres -- /bin/sh -c "echo ~/.psql_history" /home/ecarroll/.psql_history
您可以通過上面的
-E
標誌看到我們獲取呼叫sudo
的使用者目錄,而不是您要更改為的使用者。因此,您可以postgres
通過執行此操作以身份登錄並將歷史記錄記錄到您的主目錄,❯ sudo -E -u postgres -- psql
現在你只需要決定你想給誰這個非常危險的訪問權限!