7

我正在运行一个同时托管 MySQL 实例(带有多个数据库)和一些 SQLite 文件的服务器。我想使用管理员来管理所有这些,前提是用户提供了有效的凭据。此外,应填充数据库列表。

在 MySQL 的情况下,可以使用有效的数据库用户,并且连接可以开箱即用。但是,必须显式添加 SQLite 支持。管理员给出了这个错误:

Implement login() method to use SQLite.
  • 如何扩展Adminer类以启用 SQLite 登录?
  • 我应该怎么做才能填写有效数据库列表?
4

1 回答 1

6

此答案适用于管理员版本 4.2.5。不幸的是,它对 Adminer 4.3.x 无效。

您需要覆盖该类的logindatabases方法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 数据库列表

于 2017-09-13T00:03:23.383 回答