![](/img/trans.png)
[英]UnhandledPromiseRejectionWarning for pg.Pool promise chaining
[英]Connecting with pg.Pool and GCP IAM-based database authentication
目前,我們的 api(部署在 cloudRun 上)通過傳入帶有 db 配置和 db 用戶和密碼的 pgConfig 連接到我們的 Postgres 數據庫。
例如:
const configObject = {
host: cloudRunHost,
user: dbUser,
password: dbPassword,
database: dbName
}
async function connect() {
if(!client) {
const pgPool = new pg.Pool(configObject);
await pgPool.connect()
.then((result) => {
logger.info('Connected to DB')
client = result;
}).catch((err) => {
logger.error(err);
});
}
}
我們希望應用本身使用Cloud SQL IAM 數據庫身份驗證連接到數據庫
至今:
error: empty password returned by client
我們嘗試從 configObject 中完全刪除密碼行,但沒有幫助。 關於為什么我的服務帳戶可以直接訪問數據庫但 API 不能訪問的任何想法我懷疑我們需要向 pgPool 表明我們正在嘗試通過 IAM 而不是通過用戶/密碼進行連接。
不幸的是,沒有在 Cloud Run 上使用“自動”IAM DB AuthN 的好方法 - 雖然 Cloud Run 確實使用代理,但用戶無法打開“-enable-iam-login”標志。
Go、Python 和 Java 用戶可以使用特定於語言的連接器,但 Node.js 沒有。
看起來node-postgres
確實支持動態密碼,所以你可以做這樣的事情:
const {GoogleAuth} = require('google-auth-library');
async function main() {
const auth = new GoogleAuth();
const pool = new pg.Pool({
connectionString: 'postgresql://user@db.example:5432/my-db',
password: async () => auth.getAccessToken(),
})
}
根據您的問題,我相信您正在使用 NodeJS。 但是目前這里提到的 Python 連接器、Java 連接器和 Cloud SQL 代理都支持 IAM 數據庫身份驗證。 此外,要使用自動 IAM 數據庫身份驗證,還需要使用 Cloud SQL 連接器。
Cloud SQL Auth 代理、Java 連接器和 Python 連接器當前支持 IAM 數據庫身份驗證。
自動 IAM 數據庫身份驗證需要使用 Cloud SQL 連接器。
當您使用不受支持的 NodeJS 時,這似乎是您收到錯誤的原因: empty password returned by client.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.