🌊
Google Cloud SQL の特定のアカウントに DB へのアクセス権限を制限してみた
SQL よく分かってなかったので、今までほぼ root 同等のアカウントで DB にアクセスしていたのですが、やはり危険なので、ちゃんと調べてみました。って言っても、 DB 触っている人にとっては当たり前の常識の範疇だと思われます。
Google Cloud SQL の Web インターフェースでユーザーアカウントを作成すると、もれなく cloudsqlsuperuser
権限が付いているので、ほぼ root 同等にどのデーターベースでもアクセス出来てしまいます。これは事故ったときにとても危ない。
まずは、登録されているユーザー一覧を出力。
SELECT user, host FROM mysql.user;
登録されているユーザーの権限を出力。
SHOW GRANTS FOR user1@localhost;
で、 cloudsqlsuperuser
権限を剥奪するには、
REVOKE 'cloudsqlsuperuser' FROM user1;
とします。 Web インターフェースを使わずに SQL を直接叩けば、あまり権限の付いてないユーザーアカウントを作成できるので、私はこちらを推したい所存。
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
そして、ユーザーアカウントに特定のデーターベースのみフルアクセス権限を付与するには、
GRANT ALL PRIVILEGES ON database.* TO newuser@localhost;
とします。正しくアクセス権限が付与できていることを確認したら、
FLUSH PRIVILEGES;
として、権限を反映させます。試しに、作ったユーザーアカウントでアクセスしてみると、フルアクセス権限を与えたデーターベース以外にはアクセス出来なくなっていました。
Discussion