Postgresql

如何在 linux 中設置基於使用者的 .psql_history?

  • June 17, 2021

如果在 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按照你user1user2例子執行。

現在你要求做的是一個特別糟糕的主意。postgres不是普通使用者,是超級使用者。這些使用者可以DROP DB並且隨意TRUNCATE。您可能不希望共享該帳戶。

但是假設您不想授予每個使用者連接到數據庫或創建新數據庫的能力。這並不理想,但如果您想這樣做,有一些機制可以幫助您,儘管受上述警告的影響,我永遠不會與postgres使用者共享訪問權限。

環境變數

使用HISTFILEor PSQL_HISTORYor 環境變數,

歷史文件

將用於儲存歷史列表的文件名。如果未設置,則文件名取自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

現在你只需要決定你想給誰這個非常危險的訪問權限!

引用自:https://dba.stackexchange.com/questions/294290