1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

hyn/multi-tenant使用中にDBのタイムゾーンを変更したらLaravelからテナントのDBに接続出来なくなった時のメモ

Last updated at Posted at 2021-04-15

環境

Laravel
MySQL(AURORA)
hyn/multi-tenant

結論

テナントDBアカウントのパスワード生成にcreated_atを使用しているため、
値が変更されるとテナントDBアカウントでテナントDBに接続出来なくなる。

経緯

AURORAのパラメータグループで time_zone を変更したらテナントDBアカウントでテナントDBに接続出来なくなった。

Access denied

調べたらテナントDBのパスワード生成には websites.created_atを使用しているようだ。

vendor\hyn\multi-tenant\src\Generators\Database\DefaultPasswordGenerator.php
    public function generate(Website $website) : string
    {
        $key = $this->app['config']->get('tenancy.key');

        // Backward compatibility
        if ($key === null) {
            return md5(sprintf(
                '%s.%d',
                $this->app['config']->get('app.key'),
                $website->id
            ));
        }

        return md5(sprintf(
            '%d.%s.%s.%s',
            $website->id,
            $website->uuid,
            $website->created_at,
            $key
        ));
    }

うちのwebsites.created_atはtimestamp型なのでDBのタイムゾーンによってよしなに変換される日時は変わってしまう。
今回の場合は9時間遅い時間を返すようになってしまった。
なのでcreated_atに9時間早い日時を設定したところ、DBに接続出来るようになった。

update websites set created_at = '2021-04-14 11:24:12';

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?