MySQL 8.0では、アカウント周りのさまざまな強化機能が追加されてきました。この連載ではこれまでも、MySQLのROLE[その1]やパスワード検証必須ポリシーとログイン失敗時のアカウントの一時ロックなどで、MySQL 8.0でのアカウント機能を見ていきました。
さらに、MySQL 8.0.21ではアカウント作成時にコメントやユーザー属性を追加できるようになっています。この機能を利用することで、目的別や何かしらの理由で作成されたアカウントの判断材料として利用することができるかもしれません。
今回は、MySQL 8.0.21で追加されたアカウント作成時のコメントやユーザー属性値の追加について見ていきます。なお、今回利用するMySQLはバージョン8.0.26なります。
アカウントにコメントを付ける
アカウントに紐づくコメントを作成するには、CREATE USER構文にCOMMENT 'コメントの内容'
を記述することで紐づけることができます。
作成されたコメントは、information_schemaのuser_attributesテーブル内にあるattributeカラムの中に、longtext型の情報として保持されます。
コメントはALTER USER構文で変更することができます。また、DROP USERでユーザーを削除した際は、コメントも一緒にuser_attributeから削除されます。
アカウントにユーザー属性を付ける
続いて属性の付与について見ていきましょう。
ユーザー属性を付与するには、CREATE USER構文にATTRIBUTE '{KEYとなる値: VALUEとなる値}'
のように、KEYとVALUEからなるJSONオブジェクトを付与します。
実際に作成された属性はコメントと同様に、information_schemaのuser_attributesテーブルで確認することができます。
また、カンマ区切りで複数のKEYとVALUEを定義することで複数の属性を保持させることができます。このあたりはJSONと同じです。
また、コメントと同様にALTER USER構文で属性値の変更、DROP USERでユーザーを削除したときには一緒にuser_attributeのデータも削除されます。
そして、JSON型の扱いと同様にカラムパス演算子やインライン演算子を利用することで、特定の属性値のみを取り出すことも可能です。
コメントとユーザー属性
では、すでにコメントがあるアカウントに対してユーザー属性を付与するとどうなるのでしょうか。CREATE USER構文でコメントを付与し、ALTER USER構文でユーザー属性を付与してみます。
やはりユーザー属性で記述した内容で上書きされて変更されてしまいました。user_attributeのテーブル定義を見てみましょう。
user_attributesの実態はVIEWであり、データはmysqlスキーマのUSERテーブルにあるuser_attributesのmetadataを参照しているようです。json_extractを使ってmetadataの中身を取り出しています。
そのため、mysqlスキーマのUSERテーブルの方のuser_attributesカラムからmetadataの中身を更新した場合は、information_schema側のuser_attributesも変更されます。
下の例では、もともあったemailの属性値(test_user@example.com)をmysqlスキーマ側のuserテーブルを直接更新して、test@example.comに書き換えています。
まとめ
今回はMySQL 8.0.21で新しく追加されたユーザーコメントとユーザー属性の機能について見ていきました。1つのデータベースで多くのアカウントを運用する場合では、使用用途やアカウント種別などを載せることで、普段の運用をサポートしてくれることがあるかもしれません。ぜひ、利用を検討してみてください。