diff --git a/lib/dbi/handles/database.rb b/lib/dbi/handles/database.rb
index afd3c98..e2d4b60 100644
--- a/lib/dbi/handles/database.rb
+++ b/lib/dbi/handles/database.rb
@@ -22,7 +22,7 @@ module DBI
         # Assign the driver name. This can be leveraged to create custom type
         # management via DBI::TypeUtil#convert.
         def driver_name=(name)
-            @driver_name = name
+            @driver_name = name.dup
             @driver_name.freeze
         end
 
diff --git a/test/dbd/general/test_database.rb b/test/dbd/general/test_database.rb
index 0d2b616..0ade223 100644
--- a/test/dbd/general/test_database.rb
+++ b/test/dbd/general/test_database.rb
@@ -203,4 +203,18 @@
         assert_equal [ "Billy", 22 ], @sth.fetch
         @sth.finish
     end
+
+    def test_driver_name # see rf-27220
+        drv = 'FauxSqlConnector'
+
+        assert !drv.frozen?
+        assert_nothing_raised do
+          @dbh.driver_name = drv
+        end
+        assert !drv.frozen?
+
+        assert_equal 'FauxSqlConnector', @dbh.driver_name
+        drv.upcase!
+        assert_equal 'FauxSqlConnector', @dbh.driver_name
+    end
 end
