diff --git a/core/core.services.yml b/core/core.services.yml
index 3434104d3e..e929c7d795 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -554,6 +554,12 @@ services:
       - { name: module_install.uninstall_validator }
     arguments: ['@string_translation', '@extension.list.module', '@extension.list.theme']
     lazy: true
+  module_required_by_database_driver_uninstall_validator:
+    class: Drupal\Core\Extension\ModuleRequiredByDatabaseDriverUninstallValidator
+    tags:
+      - { name: module_install.uninstall_validator }
+    arguments: ['@string_translation', '@extension.list.module', '@database']
+    lazy: true
   theme_handler:
     class: Drupal\Core\Extension\ThemeHandler
     arguments: ['%app.root%', '@config.factory', '@extension.list.theme']
diff --git a/core/lib/Drupal/Core/Extension/ModuleRequiredByDatabaseDriverUninstallValidator.php b/core/lib/Drupal/Core/Extension/ModuleRequiredByDatabaseDriverUninstallValidator.php
new file mode 100644
index 0000000000..425f28bf64
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/ModuleRequiredByDatabaseDriverUninstallValidator.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\Core\Extension;
+
+use Drupal\Core\Database\Connection;
+use Drupal\Core\Extension\ModuleExtensionList;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\Core\StringTranslation\TranslationInterface;
+
+/**
+ * Ensures modules cannot be uninstalled if enabled the database driver depend
+ * on them.
+ */
+class ModuleRequiredByDatabaseDriverUninstallValidator implements ModuleUninstallValidatorInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * The module extension list.
+   *
+   * @var \Drupal\Core\Extension\ModuleExtensionList
+   */
+  protected $moduleExtensionList;
+
+  /**
+   * The database connection.
+   *
+   * @var \Drupal\Core\Database\Connection
+   */
+  protected $connection;
+
+  /**
+   * Constructs a new ModuleRequiredByDatabaseDriverUninstallValidator.
+   *
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
+   *   The string translation service.
+   * @param \Drupal\Core\Extension\ModuleExtensionList $extension_list_module
+   *   The module extension list.
+   * @param \Drupal\Core\Database\Connection $connection
+   *   The database connection.
+   */
+  public function __construct(TranslationInterface $string_translation, ModuleExtensionList $extension_list_module, Connection $connection) {
+    $this->stringTranslation = $string_translation;
+    $this->moduleExtensionList = $extension_list_module;
+    $this->connection = $connection;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validate($module) {
+    $reasons = [];
+
+    // When the database driver is provided by a module, then that module
+    // cannot be uninstalled.
+    if (!empty($this->connection->getModuleName()) && $module == $this->connection->getModuleName()) {
+      $module_name = $this->moduleExtensionList->get($module)->info['name'];
+      $reasons[] = $this->t('The module: @module_name is providing the database driver: @driver_name.',
+        ['@module_name' => $module_name, '@driver_name', $this->connection->driver()]);
+    }
+
+    return $reasons;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/ProxyClass/Extension/ModuleRequiredByDatabaseDriverUninstallValidator.php b/core/lib/Drupal/Core/ProxyClass/Extension/ModuleRequiredByDatabaseDriverUninstallValidator.php
new file mode 100644
index 0000000000..b08e0d4501
--- /dev/null
+++ b/core/lib/Drupal/Core/ProxyClass/Extension/ModuleRequiredByDatabaseDriverUninstallValidator.php
@@ -0,0 +1,88 @@
+<?php
+// @codingStandardsIgnoreFile
+
+/**
+ * This file was generated via php core/scripts/generate-proxy-class.php 'Drupal\Core\Extension\ModuleRequiredByDatabaseDriverUninstallValidator' "core/lib/Drupal/Core".
+ */
+
+namespace Drupal\Core\ProxyClass\Extension {
+
+    /**
+     * Provides a proxy class for \Drupal\Core\Extension\ModuleRequiredByDatabaseDriverUninstallValidator.
+     *
+     * @see \Drupal\Component\ProxyBuilder
+     */
+    class ModuleRequiredByDatabaseDriverUninstallValidator implements \Drupal\Core\Extension\ModuleUninstallValidatorInterface
+    {
+
+        use \Drupal\Core\DependencyInjection\DependencySerializationTrait;
+
+        /**
+         * The id of the original proxied service.
+         *
+         * @var string
+         */
+        protected $drupalProxyOriginalServiceId;
+
+        /**
+         * The real proxied service, after it was lazy loaded.
+         *
+         * @var \Drupal\Core\Extension\ModuleRequiredByDatabaseDriverUninstallValidator
+         */
+        protected $service;
+
+        /**
+         * The service container.
+         *
+         * @var \Symfony\Component\DependencyInjection\ContainerInterface
+         */
+        protected $container;
+
+        /**
+         * Constructs a ProxyClass Drupal proxy object.
+         *
+         * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
+         *   The container.
+         * @param string $drupal_proxy_original_service_id
+         *   The service ID of the original service.
+         */
+        public function __construct(\Symfony\Component\DependencyInjection\ContainerInterface $container, $drupal_proxy_original_service_id)
+        {
+            $this->container = $container;
+            $this->drupalProxyOriginalServiceId = $drupal_proxy_original_service_id;
+        }
+
+        /**
+         * Lazy loads the real service from the container.
+         *
+         * @return object
+         *   Returns the constructed real service.
+         */
+        protected function lazyLoadItself()
+        {
+            if (!isset($this->service)) {
+                $this->service = $this->container->get($this->drupalProxyOriginalServiceId);
+            }
+
+            return $this->service;
+        }
+
+        /**
+         * {@inheritdoc}
+         */
+        public function validate($module)
+        {
+            return $this->lazyLoadItself()->validate($module);
+        }
+
+        /**
+         * {@inheritdoc}
+         */
+        public function setStringTranslation(\Drupal\Core\StringTranslation\TranslationInterface $translation)
+        {
+            return $this->lazyLoadItself()->setStringTranslation($translation);
+        }
+
+    }
+
+}
