如何在 Exposed 中禁用 SQL 参数登录?
How to disable SQL parameters logging in Exposed?
我使用默认的 Exposed 框架配置,它具有框架为数据库调用创建的 SQL 语句的内置日志记录。
结果,我在日志中看到 SQL 语句,格式如下:
[...] DEBUG Exposed - INSERT INTO sensitive_table (column1, column2) VALUES ('PII1', 'PII2')
是否可以在 Exposed 中配置日志记录以隐藏(例如替换为“?”)可能出现在 SQL 语句参数中的敏感信息?
[...] DEBUG Exposed - INSERT INTO sensitive_table (column1, column2) VALUES (?, ?)
我使用自定义 SqlLogger
解决了这个问题,它记录 SQL 而不注入参数值。
object SafeSqlLogger : SqlLogger {
private val log: Logger = LoggerFactory.getLogger(SafeSqlLogger::class.java)
override fun log(context: StatementContext, transaction: Transaction) {
log.debug(context.sql(TransactionManager.current()))
}
}
我在 logback 配置中禁用了 Exposed 记录器。
<logger name="Exposed" level="OFF"/>
并将记录器添加到我想要记录的交易中。
transaction {
addLogger(SafeSqlLogger)
// query the database
}
结果,我得到了以下日志语句:
[...] DEBUG SafeSqlLogger - INSERT INTO sensitive_table (column1, column2) VALUES (?, ?)
最后写了一个函数,可以代替 transaction
用于记录交易。
fun <T> loggedTransaction(db: Database? = null, statement: Transaction.() -> T): T {
return transaction(db.transactionManager.defaultIsolationLevel,
db.transactionManager.defaultRepetitionAttempts,
db
) {
addLogger(SafeSqlLogger)
statement.invoke(this)
}
}
希望这对和我有同样问题的人有所帮助。
我使用默认的 Exposed 框架配置,它具有框架为数据库调用创建的 SQL 语句的内置日志记录。 结果,我在日志中看到 SQL 语句,格式如下:
[...] DEBUG Exposed - INSERT INTO sensitive_table (column1, column2) VALUES ('PII1', 'PII2')
是否可以在 Exposed 中配置日志记录以隐藏(例如替换为“?”)可能出现在 SQL 语句参数中的敏感信息?
[...] DEBUG Exposed - INSERT INTO sensitive_table (column1, column2) VALUES (?, ?)
我使用自定义 SqlLogger
解决了这个问题,它记录 SQL 而不注入参数值。
object SafeSqlLogger : SqlLogger {
private val log: Logger = LoggerFactory.getLogger(SafeSqlLogger::class.java)
override fun log(context: StatementContext, transaction: Transaction) {
log.debug(context.sql(TransactionManager.current()))
}
}
我在 logback 配置中禁用了 Exposed 记录器。
<logger name="Exposed" level="OFF"/>
并将记录器添加到我想要记录的交易中。
transaction {
addLogger(SafeSqlLogger)
// query the database
}
结果,我得到了以下日志语句:
[...] DEBUG SafeSqlLogger - INSERT INTO sensitive_table (column1, column2) VALUES (?, ?)
最后写了一个函数,可以代替 transaction
用于记录交易。
fun <T> loggedTransaction(db: Database? = null, statement: Transaction.() -> T): T {
return transaction(db.transactionManager.defaultIsolationLevel,
db.transactionManager.defaultRepetitionAttempts,
db
) {
addLogger(SafeSqlLogger)
statement.invoke(this)
}
}
希望这对和我有同样问题的人有所帮助。