More Related Content Similar to What's New in MySQL 5.7 Security (20) More from Mikiya Okuno (20) What's New in MySQL 5.7 Security1. What's New inWhat's New in
MySQL 5.7 SecurityMySQL 5.7 Security
奥野 幹也
Twitter: @nippondanji
mikiya (dot) okuno (at) gmail (dot) com
@MySQL 5.7 新機能徹底攻略講座
3. セキュリティ関係の新機能
● パスワード期限の設定
●
ユーザーのロック、アンロック
● SET PASSWORD コマンドの仕様変更
● CREATE USER … IF NOT EXISTS
●
ログイン不可能なユーザーアカウント
●
SSL のセットアップが容易に
– キーファイルの自動生成
– mysql_ssl_rsa_setup
●
透過的テーブルスペース暗号化
●
デフォルトの状態がセキュアに
– test データベースの廃止
– 匿名ユーザーの廃止
– localhost 以外の root の廃止
5. ALTER USER コマンドの改良
● MySQL 5.6 で追加されたコマンド
– MySQL 5.6 でできたのは、パスワードを期限切れ( EXPIRED )
にすることだけ
● MySQL 5.7 では以下の機能が加わった
– パスワード期限の設定
– パスワードの変更
– 認証プラグインの変更
– SSL 関係の設定
– アカウントのロック・アンロック
– リソース制限の設定や変更
– プロキシーユーザーのマッピング
9. SET PASSWORD の
書式が変更に
● 〜 MySQL 5.6
– SET PASSWORD = PASSWORD('new-password');
●
MySQL 5.7
– SET PASSWORD = 'new-password';
新しい書式に慣れると
古いバージョンのサーバーを使うとき
混乱してしまうかも。
5.7 では ALTER USER を
使う手も有り。
13. CREATE USER
IF NOT EXISTS
● ユーザーアカウントがない場合だけ作成する
– 既にある場合には何もしない
– CREATE USER IF NOT EXISTS myuser@localhost
IDENTIFIED BY 'my-password';
●
バッチ処理などでエラーを出したくない場合に便利
●
削除バージョンも有り
– DROP USER IF EXISTS myuser@localhost;
16. 作成方法
● プラグインのインストール
– INSTALL PLUGIN mysql_no_login SONAME
'mysql_no_login.so';
●
ユーザーアカウントの作成
– CREATE USER nologinuser@localhost IDENTIFIED
WITH 'mysql_no_login';
19. ユーザー作成例
mysql> install plugin authentication_pam soname
'authentication_pam.so';
Query OK, 0 rows affected (0.02 sec)
mysql> CREATE USER developer@localhost IDENTIFIED BY
'somepassword';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON appdev.* to developer@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER ''@'' IDENTIFIED WITH authentication_pam
-> AS 'mysql, appdev=developer';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT PROXY ON 'developer'@'localhost' TO ''@'';
Query OK, 0 rows affected (0.00 sec)
20. 認証実行例
shell> cat /etc/pam.d/mysql
#%PAM-1.0
auth include system-login
account include system-login
shell> mysql -u myuser -p --enable-cleartext-plugin
Enter password:
mysql> SELECT USER(), @@proxy_user, CURRENT_USER();
+------------------+--------------+---------------------+
| USER() | @@proxy_user | CURRENT_USER() |
+------------------+--------------+---------------------+
| myuser@localhost | ''@'' | developer@localhost |
+------------------+--------------+---------------------+
1 row in set (0.00 sec)
27. TLSv1.2 のサポート
● MySQL 5.0 〜 MySQL 5.6
– TLSv1
● MySQL 5.7
– w/OpenSSL … TLSv1, TLSv1.1, TLSv1.2
– w/YaSSL … TLSv1, TLSv1.1
29. --ssl オプションの変更
● --ssl オプションの意味が変更された
– MySQL 5.6 まで
● SSL を利用可能であれば使うという意味
● 利用可能でない場合エラーにならず非 SSL 通信
– えっ!?
– MySQL 5.7
● SSL の利用を強制
●
SSL が利用できない場合はエラー終了
30. SSL がデフォルトで有効化
● SSL が利用可能な場合は SSL を利用するように
●
MYSQL_OPT_SSL_VERIFY_SERVER_CERT を無効化
– クライアント証明書を検証するフラグ
– MySQL 5.6 までは SSL 利用時に自動的に ON
●
付属のクライアントプログラムのみ
●
libmysqlclient では自動的に ON にはならない
– MySQL 5.7 では自動的に ON にならないようになった
●
クライアント証明書がなくても SSL 利用可能
33. mysql_secure_installation
● MySQL 5.6 では Perl のスクリプトだった
– ドライバによる接続ではなく、 mysql コマンドを呼び出す実
装(よくないね!!)
– 役割は設定を安全にする
● root@localhost のパスワード設定
●
test データベースの削除
●
匿名ユーザーの削除
● localhost 以外の root ユーザーの削除
– MySQL 5.7 では下の 3 つは不要に・・・
●
MySQL 5.7 では C/C++ に書き換えられた
– libmysqlclient を使用
– パスワードバリデーションプラグインの設定が追加された
35. MySQL 5.7 のセキュリティは
超絶進化!!
● 安全性向上
– TLSv1.1/1.2 のサポート
– サーバーはデフォルトの状態で安全に
– クライアントの挙動も安全に
● 管理性向上
– ネイティブパスワード認証におけるプロキシーユーザー
– ログイン不可なアカウントによるアクセス制限
– SSL セットアップの手順簡略化
– アカウントのロック・アンロック
– パスワード期限の設定
– SET PASSWORD の
仕様変更
– ALTER USER コマンドの改良
もうこれは
使うしかない!!