在 Postgres 日志中记录经过身份验证的用户
Log the authenticated user in the Postgres logs
用例 - 需要从 Postgres 日志中的 Python/Flask/Sqlalchemy 记录经过身份验证的用户(不是数据库用户)。
目前我已经启用 postgres.conf 的 Postgres 日志,格式如下。
log_line_prefix = 'time=%t, %q db=%d, user=%u, ip=%h, app=%a'
这将在 postgres.csv 中记录以下格式。
2021-11-17 09:56:18.856 GMT,"db_user_name","database_name",4962,"10.0.0.2:52068",6194d1c2.1362,16,"idle in transaction",2021-11-17 09:56:18 GMT,3/12392,0,LOG,00000,"statement: Query,,,,,,,,,"AppName"
我想到了以下方法:
- 将用户名动态连接到应用程序名称。
- 试图找到向查询添加一些元数据(用户名)的方法。
- 编写一个 sql 函数在每个查询之前执行。
我尝试通过以下方式将用户名连接到 app_name。
self.session.bind.url.query.update({'application_name': 'TEST_USERNAME'})
self.engine.url.query.update({'application_name': 'TEST_USERNAME'})
但这并没有反映或更新日志中的应用程序名称。
我也尝试在查询中添加一些元数据,但它也没有反映在日志中。
对于sql函数,我认为这是一个不必要的开销。
我很想知道是否有人处理这个用例,或者如果有人可以指导我找到解决方案,我将不胜感激。
您当然可以使用 application_name
。
您可以在连接字符串中设置该参数,也可以随时通过 运行
更改参数
SET application_name = 'whatever';
或
SELECT set_config('application_name', 'whatever', FALSE);
用例 - 需要从 Postgres 日志中的 Python/Flask/Sqlalchemy 记录经过身份验证的用户(不是数据库用户)。
目前我已经启用 postgres.conf 的 Postgres 日志,格式如下。
log_line_prefix = 'time=%t, %q db=%d, user=%u, ip=%h, app=%a'
这将在 postgres.csv 中记录以下格式。
2021-11-17 09:56:18.856 GMT,"db_user_name","database_name",4962,"10.0.0.2:52068",6194d1c2.1362,16,"idle in transaction",2021-11-17 09:56:18 GMT,3/12392,0,LOG,00000,"statement: Query,,,,,,,,,"AppName"
我想到了以下方法:
- 将用户名动态连接到应用程序名称。
- 试图找到向查询添加一些元数据(用户名)的方法。
- 编写一个 sql 函数在每个查询之前执行。
我尝试通过以下方式将用户名连接到 app_name。
self.session.bind.url.query.update({'application_name': 'TEST_USERNAME'})
self.engine.url.query.update({'application_name': 'TEST_USERNAME'})
但这并没有反映或更新日志中的应用程序名称。
我也尝试在查询中添加一些元数据,但它也没有反映在日志中。
对于sql函数,我认为这是一个不必要的开销。
我很想知道是否有人处理这个用例,或者如果有人可以指导我找到解决方案,我将不胜感激。
您当然可以使用 application_name
。
您可以在连接字符串中设置该参数,也可以随时通过 运行
更改参数SET application_name = 'whatever';
或
SELECT set_config('application_name', 'whatever', FALSE);