php 限制“laravel-ask-database”包的表

bgibtngc  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(114)

我是laravel开发的新手,我遇到了一个为数据库生成自然查询的软件包,叫做“laravel-ask-database”,有没有办法限制这个软件包访问哪些表?

2exbekwf

2exbekwf1#

laravel-ask-database从db模式第34行获取所有表列表:

protected function getTables(string $question): array
    {
        return once(function () use ($question) {
            $tables = DB::connection($this->connection)
                ->getDoctrineSchemaManager()
                ->listTables();

            if (count($tables) < config('ask-database.max_tables_before_performing_lookup')) {
                return $tables;
            }

            return $this->filterMatchingTables($question, $tables);
        });
    }

字符串
而且没有可配置的过滤器。但是,作为保护表的一个选项,您可以创建一个名为laravel-ask-database的附加MySQL用户,该用户具有特定于自定义的表权限。
要将自定义laravel-ask-database连接添加到config/database.php,请使用以下配置:

'connections' => [
...
        'laravel-ask-database' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => 'laravel-ask-database',
            'password' => ...,
            ...
        ],
...
]


接下来通过.env文件更改ask-database.connection的默认值(config/ask-database.php):

ASK_DATABASE_DB_CONNECTION=laravel-ask-database


这不会保护对受限表的SQL查询的构造,但会保护对它们的访问。
替代方式:

  • 分叉项目或提出拉取请求。
  • 避免在提示中使用受限制的表名。

希望这对你有帮助

相关问题