環境
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';
以上