LoginSignup
3
2

More than 5 years have passed since last update.

HomebrewでCakePHP環境構築〜MySQL編

Last updated at Posted at 2018-02-03

rootユーザーの設定

サーバーを起動し、rootのパスワード設定を行う。警告は出るものの、設定はされているようだ。

$ mysql.server start
Starting MySQL
. SUCCESS! 

$ mysqladmin -u root password パスワード
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

ちなみにMySQLへログイン後は、SET PASSWORDコマンドでパスワードの変更が可能である。

自分はコマンドラインから実行してしまい、度重なるエラーに延々と悩んでしまった。

$ SET PASSWORD FOR root@localhost=password('パスワード')
-bash: syntax error near unexpected token `('

ごもっとも。

セキュリティの設定

続いてはセキュリティの設定を行う。いくつか質問があるので、Change the password for root ?以外は全てyと回答する。

$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 50 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

データベースの作成

rootユーザーでログイン後、testcake_dbデータベースを作成する。作成後はSHOWコマンドで確認できる。

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.
以下略

mysql> CREATE DATABASE testcake_db;
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testcake_db        |
+--------------------+
5 rows in set (0.00 sec)

ユーザーの確認

途中でユーザーの一覧表を確認しようと思ったのだが、passwordカラムが存在しないらしく拒否されてしまった。とりあえずユーザー名だけ確認してみる。

mysql> SELECT user,password FROM mysql.user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

mysql> SELECT user FROM mysql.user;
+---------------+
| user          |
+---------------+
| mysql.session |
| mysql.sys     |
| root          |
+---------------+
3 rows in set (0.01 sec)

ユーザーの一覧表にある項目を改めて確認してみる。どうやらauthentication_stringが旧passwordカラムのようだ。

mysql> SHOW COLUMNS from mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.01 sec)

ユーザーの追加

試しにユーザーを作ろうとするが、パスワードの設定が厳しすぎて作成拒否される。

mysql> CREATE USER yuki@localhost IDENTIFIED BY 'パスワード';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

そのため、パスワードの設定を少し変更することにした。まずは設定状況を確認する。

mysql> SHOW GLOBAL VARIABLES LIKE 'validate%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

validate_password_policyをMEDIUMからLOWにした。

mysql> SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

反映されているか確認する。

mysql> SHOW GLOBAL VARIABLES LIKE 'validate%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 8     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

これでOK。改めてユーザーを作成すると、今度はうまくいった。

mysql> CREATE USER yuki@localhost IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)

権限も与えてみる。*.*で全てのデータベースに対して権限を与えることができる。

mysql> GRANT ALL ON *.* TO yuki@localhost;
Query OK, 0 rows affected (0.01 sec)

作業終了。MySQLを終了するには、exitでログアウト後、サーバーを止める。

mysql> exit
Bye

$ mysql.server stop
Shutting down MySQL
.. SUCCESS! 

CakePHPのデータベース設定

testcakeディレクトリにあるconfigディレクトリのapp.phpを編集する。

変更するのはhost,username,password,databaseの4箇所のみ。

'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            'username' => 'yuki',
            'password' => 'パスワード',
            'database' => 'testcake_db',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,

この後bin/cake serverを実行しブラウザでCakePHPの画面を確認すると、データベースの項目に緑のコック帽が!CakePHP is able to connect to the database.と表示されれば完了だ。

これでケーキ職人への道は開けたのだろうか・・・?
色々忘れていることもある気がするが、次回からは実際にCakePHPを使用してみることにする。

3
2
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
3
2