Skip to content

Commit 6c553b5

Browse files
Redact SQL Server connection parameter values in logs (#2762)
* redact sqlserver connection parameter values in logs * Fix handling max retries for SQL Server connection * Simplify test --------- Co-authored-by: Michael Van de Steene <michael.vandesteene@hotmail.com>
1 parent 364ffdd commit 6c553b5

2 files changed

Lines changed: 39 additions & 4 deletions

File tree

soda-sqlserver/src/soda_sqlserver/common/data_sources/sqlserver_data_source_connection.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ def _format_rows(self, rows: list[tuple]) -> list[tuple]:
116116
def _format_row(self, row: Any) -> tuple:
117117
return tuple(row)
118118

119-
def build_connection_string(self, config: SqlServerConnectionProperties):
119+
@staticmethod
120+
def build_connection_string(config: SqlServerConnectionProperties):
120121
conn_params = []
121122

122123
conn_params.append(f"DRIVER={{{config.driver}}}")
@@ -138,8 +139,8 @@ def build_connection_string(self, config: SqlServerConnectionProperties):
138139
if config.encrypt:
139140
conn_params.append("Encrypt=YES")
140141

141-
if int(config.connection_max_retries) > 0:
142-
conn_params.append(f"ConnectRetryCount={int(self.connection_max_retries)}")
142+
if config.connection_max_retries is not None:
143+
conn_params.append(f"ConnectRetryCount={config.connection_max_retries}")
143144

144145
if config.enable_tracing:
145146
conn_params.append("SQL_ATTR_TRACE=SQL_OPT_TRACE_ON")
@@ -163,7 +164,7 @@ def build_connection_string(self, config: SqlServerConnectionProperties):
163164

164165
if config.connection_parameters:
165166
for key, value in config.connection_parameters.items():
166-
logger.info(f"Adding connection parameter: {key}={value}")
167+
logger.info("Adding connection parameter: %s=<redacted>", key)
167168
conn_params.append(f"{key}={value}")
168169

169170
conn_params.append(f"APP=soda-core-fabric/{SODA_CORE_VERSION}")
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from __future__ import annotations
2+
3+
import logging
4+
5+
from pydantic import SecretStr
6+
from soda_sqlserver.common.data_sources.sqlserver_data_source_connection import (
7+
SqlServerDataSourceConnection,
8+
SqlServerPasswordAuth,
9+
)
10+
11+
12+
def test_connection_parameter_logs_redact_values(caplog) -> None:
13+
config = SqlServerPasswordAuth(
14+
host="localhost",
15+
port=1433,
16+
database="master",
17+
user="sa",
18+
password=SecretStr("Password1!"),
19+
connection_parameters={
20+
"application_intent": "ReadOnly",
21+
"access_token": "super-secret-token",
22+
},
23+
)
24+
25+
with caplog.at_level(logging.INFO):
26+
connection_string = SqlServerDataSourceConnection.build_connection_string(config)
27+
28+
assert "application_intent=ReadOnly" in connection_string
29+
assert "access_token=super-secret-token" in connection_string
30+
31+
assert "Adding connection parameter: application_intent=<redacted>" in caplog.text
32+
assert "Adding connection parameter: access_token=<redacted>" in caplog.text
33+
assert "ReadOnly" not in caplog.text
34+
assert "super-secret-token" not in caplog.text

0 commit comments

Comments
 (0)