Как расширить Adminer для поддержки баз данных SQLite при входе в систему?

Я использую сервер, на котором размещены как экземпляр MySQL (с несколькими базами данных), так и несколько файлов SQLite. Я хотел бы использовать Adminer управлять всеми из них, при условии, что действительные учетные данные предоставлены пользователями. Кроме того, список баз данных должен быть заполнен.

В случае MySQL могут использоваться действительные пользователи базы данных, и соединение работает «из коробки». Тем не менее, поддержка SQLite должна быть добавлена ​​явно. Администратор выдает эту ошибку:

Implement login() method to use SQLite.
  • Как мне продлить Adminer класс для включения входа в SQLite?
  • Что я должен сделать, чтобы заполнить список действительных баз данных?

6

Решение

Этот ответ относится к Adminer версии 4.2.5. К сожалению, он не действителен для Adminer 4.3.x.

Вы должны переопределить login а также databases методы Adminer класс, убедившись, что вы делаете это только для драйвера SQLite, а не в других случаях. Следующий код обеспечивает базовую систему входа в систему со списком баз данных:

<?php
function adminer_object() {
class AdminerSoftware extends Adminer {
function login($login, $password) {
global $jush;
if ($jush == "sqlite")
return ($login === 'admin') && ($password === 'changeme');
return true;
}
function databases($flush = true) {
if (isset($_GET['sqlite']))
return ["/path/to/first.db", "/path/to/second.db"];
return get_databases($flush);
}
}
return new AdminerSoftware;
}
include "./adminer-4.2.5.php";

Код может быть адаптирован для поддержки нескольких пользователей. Сохраните файл как index.php в том же каталоге, где adminer-4.2.5.php расположен. Обязательно настройте имя пользователя, пароль и пути к базам данных.

Вот несколько важных замечаний:

  • login метод не имеет правильного имени, это начальная проверка, выполненная администратором
  • для баз данных, которые имеют встроенную пользовательскую функциональность, например MySQL, этот метод всегда должен возвращать true как в оригинальном классе
  • Файлы SQLite не имеют встроенной аутентификации, поэтому мы определяем искусственную проверку, чтобы предотвратить несанкционированный доступ

Результат

Список баз данных SQLite, отображаемых администратором

7

Другие решения

Других решений пока нет …