You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel 7中为MySQL创建专属新数据库及用户并存储信息

实现步骤

1. 准备当前系统的数据存储模型

首先在负责生成凭证的Laravel系统中,创建用于存储数据库用户信息的数据表和模型:

生成迁移文件

执行Artisan命令创建迁移:

php artisan make:migration create_database_users_table

编辑迁移文件,定义表结构:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('database_users', function (Blueprint $table) {
            $table->id();
            $table->string('username')->unique();
            $table->string('database_name')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('database_users');
    }
};

执行迁移:

php artisan migrate

创建对应模型

生成DatabaseUser模型:

php artisan make:model DatabaseUser

编辑模型文件,允许批量赋值:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class DatabaseUser extends Model
{
    protected $fillable = ['username', 'database_name', 'password'];
}

2. 自动生成凭证并创建专属数据库/用户

创建一个服务类封装核心逻辑,避免控制器代码冗余:

namespace App\Services;

use App\Models\DatabaseUser;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class CreateExclusiveDatabaseService
{
    public function execute()
    {
        // 1. 生成符合格式的随机凭证
        $username = Str::lower(Str::random(4));
        $databaseName = ucfirst($username) . 'DB';
        $password = $username . 'Db' . Str::random(3, 'numeric');

        // 2. 创建数据库(以MySQL为例)
        DB::statement("CREATE DATABASE IF NOT EXISTS `{$databaseName}`");

        // 3. 创建专属用户并授予仅访问该库的权限
        DB::statement("CREATE USER IF NOT EXISTS '{$username}'@'%' IDENTIFIED BY '{$password}'");
        DB::statement("GRANT ALL PRIVILEGES ON `{$databaseName}`.* TO '{$username}'@'%'");
        DB::statement("FLUSH PRIVILEGES");

        // 4. 将凭证存入当前系统数据库
        return DatabaseUser::create([
            'username' => $username,
            'database_name' => $databaseName,
            'password' => $password,
        ]);
    }
}

在控制器中调用服务

创建控制器方法触发逻辑:

namespace App\Http\Controllers;

use App\Services\CreateExclusiveDatabaseService;
use Illuminate\Http\JsonResponse;

class DatabaseProvisionController extends Controller
{
    public function create(CreateExclusiveDatabaseService $service): JsonResponse
    {
        $credentials = $service->execute();
        return response()->json($credentials);
    }
}

添加路由(routes/api.php):

Route::post('/provision-database', [DatabaseProvisionController::class, 'create'])->middleware('auth:sanctum');

3. 另一个Laravel系统访问数据的配置

方式1:动态加载连接(推荐)

通过API从凭证存储系统获取信息,动态配置数据库连接:

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\DB;

// 从凭证系统获取数据(需携带API token验证)
$response = Http::withToken('YOUR_API_TOKEN')
    ->get('https://your-credential-system.com/api/database-users/{id}');
$dbConfig = $response->json();

// 动态注册数据库连接
config(['database.connections.exclusive_db' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST'),
    'database' => $dbConfig['database_name'],
    'username' => $dbConfig['username'],
    'password' => $dbConfig['password'],
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
]]);

// 使用动态连接查询数据
$data = DB::connection('exclusive_db')->table('target_table')->get();

方式2:静态配置连接

若已提前获取凭证,可直接在config/database.php中添加固定连接:

'connections' => [
    // ... 原有连接
    'samDB' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST'),
        'database' => 'samDB',
        'username' => 'sam',
        'password' => 'samDb123',
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
    ],
],

调用时指定连接:

$data = DB::connection('samDB')->table('target_table')->get();

关键注意事项

  • 确保当前系统的数据库用户拥有CREATE DATABASE和CREATE USER权限(如MySQL的root用户或授权后的专用用户)。
  • 用户主机配置@'%'允许远程访问,若仅需本地访问可改为@'localhost'。
  • 密码生成逻辑可根据安全需求调整,例如加入特殊字符或使用Hash::make(但数据库连接需明文密码,故需存储明文或加密后可解密的格式)。
  • API访问必须添加身份验证(如Sanctum),防止凭证泄露。

内容的提问来源于stack exchange,提问作者Chameera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:50:45