From 6731fb61093fd0333a0028667da944994a946b5c Mon Sep 17 00:00:00 2001 From: Justin Dell Date: Wed, 18 Mar 2026 13:54:29 -0500 Subject: [PATCH 1/3] Support trust_server_certificate option in dbconsole ODBC Driver 18+ encrypts connections by default and validates SSL certificates, causing `rails dbconsole` to fail against SQL Server instances using self-signed certificates (e.g. Docker). Pass the -C flag to sqlcmd when trust_server_certificate is set in database.yml. --- .../connection_adapters/sqlserver_adapter.rb | 1 + test/cases/dbconsole.rb | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb index 9f8810ed1..fd7d33309 100644 --- a/lib/active_record/connection_adapters/sqlserver_adapter.rb +++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb @@ -104,6 +104,7 @@ def dbconsole(config, options = {}) args += ["-d", config.database.to_s] if config.database args += ["-U", sqlserver_config[:username].to_s] if sqlserver_config[:username] args += ["-P", sqlserver_config[:password].to_s] if sqlserver_config[:password] + args += ["-C"] if sqlserver_config[:trust_server_certificate] if sqlserver_config[:host] host_arg = "tcp:#{sqlserver_config[:host]}" diff --git a/test/cases/dbconsole.rb b/test/cases/dbconsole.rb index c23e53f0e..c92f706ae 100644 --- a/test/cases/dbconsole.rb +++ b/test/cases/dbconsole.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true class DbConsole < ActiveRecord::TestCase - subject { ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter } + subject { ActiveRecord::ConnectionAdapters::SQLServerAdapter } - it "uses sqlplus to connect to database" do - subject.expects(:find_cmd_and_exec).with("sqlcmd", "-d", "db", "-U", "user", "-P", "secret", "-S", "tcp:localhost,1433") + it "uses sqlcmd to connect to database" do + subject.expects(:find_cmd_and_exec).with("sqlcmd", "-d", "db", "-U", "user", "-P", "secret", "-C", "-S", + "tcp:localhost,1433") - config = make_db_config(adapter: "sqlserver", database: "db", username: "user", password: "secret", host: "localhost", port: 1433) + config = make_db_config(adapter: "sqlserver", database: "db", username: "user", password: "secret", + host: "localhost", port: 1433, trust_server_certificate: true) subject.dbconsole(config) end From db2215ce06648b438e985be4de064657f9929557 Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Fri, 20 Mar 2026 19:25:23 +0000 Subject: [PATCH 2/3] Updated changelog and fixed test filename --- .github/workflows/ci.yml | 8 +------- CHANGELOG.md | 6 ++++++ Gemfile | 5 +++-- test/cases/{dbconsole.rb => dbconsole_test_sqlserver.rb} | 0 4 files changed, 10 insertions(+), 9 deletions(-) rename test/cases/{dbconsole.rb => dbconsole_test_sqlserver.rb} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 36f6f9aa4..e435b79f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,12 +1,6 @@ name: CI -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - schedule: - - cron: '0 4 * * 0' +on: [push, pull_request] jobs: test: diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d2cbf2c5..be5271206 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## Unreleased + +#### Added + +- [#1383](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1383) Support trust_server_certificate option in dbconsole. + ## v8.1.2 #### Fixed diff --git a/Gemfile b/Gemfile index cbb406565..f4e099ca4 100644 --- a/Gemfile +++ b/Gemfile @@ -9,9 +9,10 @@ gemspec gem "bcrypt" gem "pg", "1.5.9" gem "sqlite3", ">= 2.1" -gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby] +gem "tzinfo-data" gem "benchmark-ips" -gem "minitest", ">= 5.15.0" +gem "minitest", "~> 6.0" +gem "minitest-mock" gem "msgpack", ">= 1.7.0" if ENV["RAILS_SOURCE"] diff --git a/test/cases/dbconsole.rb b/test/cases/dbconsole_test_sqlserver.rb similarity index 100% rename from test/cases/dbconsole.rb rename to test/cases/dbconsole_test_sqlserver.rb From 69e92df3a31dad9db712ee8540037d5b2ddf210a Mon Sep 17 00:00:00 2001 From: Aidan Haran Date: Fri, 20 Mar 2026 19:30:18 +0000 Subject: [PATCH 3/3] Standardrb fixes --- test/cases/dbconsole_test_sqlserver.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cases/dbconsole_test_sqlserver.rb b/test/cases/dbconsole_test_sqlserver.rb index c92f706ae..d50064913 100644 --- a/test/cases/dbconsole_test_sqlserver.rb +++ b/test/cases/dbconsole_test_sqlserver.rb @@ -5,10 +5,10 @@ class DbConsole < ActiveRecord::TestCase it "uses sqlcmd to connect to database" do subject.expects(:find_cmd_and_exec).with("sqlcmd", "-d", "db", "-U", "user", "-P", "secret", "-C", "-S", - "tcp:localhost,1433") + "tcp:localhost,1433") config = make_db_config(adapter: "sqlserver", database: "db", username: "user", password: "secret", - host: "localhost", port: 1433, trust_server_certificate: true) + host: "localhost", port: 1433, trust_server_certificate: true) subject.dbconsole(config) end