GA

2024/01/19

keyring_file_dataに相対パスを指定したらdatadirからの相対パスで作られてしまった


TL;DR

  • keyring_file_data に絶対パスを指定したら面倒なことになった
  • 相対パスを指定するとdatadirの真下に作りやがる

準備。 keyring_file_data を指定しない場合はコンパイル時デフォルト (rpmは /var/lib/mysql-keyring 、 Standaloneは basedir/keyring ) に作る。

$ sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
$ sudo dnf module -y disable mysql
$ sudo dnf install -y mysql-community-server
$ sudo vim /etc/my.cnf
..
user=mysql
early_plugin_load=keyring_file.so

$ sudo mysqld --initialize-insecure
$ sudo systemctl start mysqld
$ sudo mysql -e "CREATE DATABASE d1; CREATE TABLE d1.t1 (num int) ENCRYPTION='Y'; INSERT INTO d1.t1 VALUES(1), (2), (3)"

$ sudo ls -l /var/lib/mysql-keyring/keyring
-rw-r-----. 1 mysql mysql 187 Jan 19 09:10 /var/lib/mysql-keyring/keyring

絶対パスに書き換えてみる。そのままだと自動生成に失敗するので先にディレクトリを作っておく。 ディレクトリには少なくとも700のパーミッションがないとkeyring_fileを掴むのに失敗して、MySQLは起動するけど ERROR 3185 (HY000) at line 1: Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully. のエラーを吐かれる

$ sudo systemctl stop mysqld
$ sudo dnf remove -y mysql-community-server
$ sudo rm -r /var/lib/mysql*

$ sudo dnf install -y mysql-community-server

$ sudo vim /etc/my.cnf
..
user=mysql
early_plugin_load=keyring_file.so
keyring_file_data=/mysql/mysql-secret

$ sudo mkdir -m 700 /mysql
$ sudo chown -R mysql. /mysql

$ sudo mysqld --initialize-insecure
$ sudo systemctl start mysqld
$ sudo mysql -e "CREATE DATABASE d1; CREATE TABLE d1.t1 (num int) ENCRYPTION='Y'; INSERT INTO d1.t1 VALUES(1), (2), (3)"

$ sudo ls -l /mysql/mysql-secret
-rw-r-----. 1 mysql mysql 187 Jan 19 09:23 /mysql/mysql-secret

相対パスに書き換えてみる。

$ sudo systemctl stop mysqld
$ sudo dnf remove -y mysql-community-server
$ sudo rm -r /var/lib/mysql* /mysql

$ sudo dnf install -y mysql-community-server

$ sudo vim /etc/my.cnf
..
user=mysql
early_plugin_load=keyring_file.so
keyring_file_data=./path_to_key

$ sudo mysqld --initialize-insecure
$ sudo systemctl start mysqld
$ sudo mysql -e "CREATE DATABASE d1; CREATE TABLE d1.t1 (num int) ENCRYPTION='Y'; INSERT INTO d1.t1 VALUES(1), (2), (3)"

$ sudo ls -l /var/lib/mysql/path_to_key
-rw-r-----. 1 mysql mysql 187 Jan 19 09:26 /var/lib/mysql/path_to_key

Σ(゚д゚lll) えっ、datadirからの相対パスだと解釈しちゃうの…?

0 件のコメント :

コメントを投稿