Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
What's New inWhat's New in
MySQL 5.7 SecurityMySQL 5.7 Security
奥野 幹也
Twitter: @nippondanji
mikiya (dot) okuno (at) gmail ...
免責事項
本プレゼンテーションにおいて示されている見解は、私
自身の見解であって、オラクル・コーポレーションの見
解を必ずしも反映したものではありません。ご了承くだ
さい。
セキュリティ関係の新機能
● パスワード期限の設定
●
ユーザーのロック、アンロック
● SET PASSWORD コマンドの仕様変更
● CREATE USER … IF NOT EXISTS
●
ログイン不可能なユーザーアカウント
●
SS...
ALTER USER の
改良
ALTER USER コマンドの改良
● MySQL 5.6 で追加されたコマンド
– MySQL 5.6 でできたのは、パスワードを期限切れ( EXPIRED )
にすることだけ
● MySQL 5.7 では以下の機能が加わった
– パスワー...
パスワード期限の
設定
自動的にパスワードを
期限切れにする
● ユーザーにパスワードを定期的に変更させたい
●
期限を設定して自動的に EXPIRE
● ALTER USER myuser@localhost PASSWORD EXPIRE
INTERVAL 200...
SET PASSWORD
の仕様変更
SET PASSWORD の
書式が変更に
● 〜 MySQL 5.6
– SET PASSWORD = PASSWORD('new-password');
●
MySQL 5.7
– SET PASSWORD = 'new-password'...
ユーザーアカウントの
ロック・アンロック
ユーザーアカウントのロック
● 一時的にユーザーアカウントを使用不能にしたい。
●
しかしユーザーアカウントを削除したくない。
● そんな場合にロックしてしまいましょう。
– ALTER USER myuser@localhost ACCOUN...
CREATE USER
IF NOT EXISTS
CREATE USER
IF NOT EXISTS
● ユーザーアカウントがない場合だけ作成する
– 既にある場合には何もしない
– CREATE USER IF NOT EXISTS myuser@localhost
IDENTIFIED B...
ログイン不可な
ユーザーアカウント
ログインができない
ユーザーアカウントの使い道
● ストアドプロシージャの実行ユーザー
●
ビューの実行ユーザー
● イベントスケジューラーの実行ユーザー
● プロキシー対象ユーザー
作成方法
● プラグインのインストール
– INSTALL PLUGIN mysql_no_login SONAME
'mysql_no_login.so';
●
ユーザーアカウントの作成
– CREATE USER nologinuser@l...
プロキシーユーザーの
利用範囲拡大
プロキシーユーザーとは
● 他のユーザーの権限を代理で拝借するユーザーのこと
●
ログイン後に別のユーザー(プロキシー対象ユーザー)の権
限が付与される
● MySQL 5.6 では外部認証と組み合わせて利用される
ユーザー作成例
mysql> install plugin authentication_pam soname
'authentication_pam.so';
Query OK, 0 rows affected (0.02 sec)
mysq...
認証実行例
shell> cat /etc/pam.d/mysql
#%PAM-1.0
auth include system-login
account include system-login
shell> mysql -u myuser ...
プロキシーユーザーを
外部認証無しでも利用可能に
● 外部認証でないユーザーでもプロキシーユーザーによる認
証が可能に
– ネイティブ認証
– SHA256 認証
● ロールのような使用方法が可能
mysql> CREATE USER prox...
SSL の設定が
簡易化
MySQL サーバー起動時に
自動的に鍵を読み込み
● データディレクトリに鍵ファイルが存在する場合、 mysqld は
自動的にオプションを設定
– ssl_ca = ca.pem
– ssl_cert = server-cert.pem
–...
MySQL サーバー起動時に
鍵を自動生成
● データディレクトリに鍵ファイルが無ければ起動時に以下の
ファイルを自動生成
– ca-key.pem
– ca.pem
– client-cert.pem
– client-key.pem
– p...
mysql_ssl_rsa_setup
● 鍵ファイルを生成するコマンド
– サーバー起動時に自動生成されるものと同じ
– コマンド一発で作成
– 鍵ファイルは MySQL 5.6 以前でも使用可能
TLSv1.2 の
サポート
TLSv1.2 のサポート
● MySQL 5.0 〜 MySQL 5.6
– TLSv1
● MySQL 5.7
– w/OpenSSL … TLSv1, TLSv1.1, TLSv1.2
– w/YaSSL … TLSv1, TLSv1.1
クライアントの挙動が
セキュアに
--ssl オプションの変更
● --ssl オプションの意味が変更された
– MySQL 5.6 まで
● SSL を利用可能であれば使うという意味
● 利用可能でない場合エラーにならず非 SSL 通信
– えっ!?
– MySQL 5.7
...
SSL がデフォルトで有効化
● SSL が利用可能な場合は SSL を利用するように
●
MYSQL_OPT_SSL_VERIFY_SERVER_CERT を無効化
– クライアント証明書を検証するフラグ
– MySQL 5.6 までは SS...
デフォルトの状態が
セキュアに
不要なユーザーアカウント等の廃止
● MySQL 5.7 で廃止された初期設定
– 匿名ユーザー
– test データベース
– root@localhost 以外の管理者アカウント
セキュリティ上のリスクに
なりそうなものは
最初から作らない。
mysql_secure_installation
● MySQL 5.6 では Perl のスクリプトだった
– ドライバによる接続ではなく、 mysql コマンドを呼び出す実
装(よくないね!!)
– 役割は設定を安全にする
● root@...
まとめ
MySQL 5.7 のセキュリティは
超絶進化!!
● 安全性向上
– TLSv1.1/1.2 のサポート
– サーバーはデフォルトの状態で安全に
– クライアントの挙動も安全に
● 管理性向上
– ネイティブパスワード認証におけるプロキシーユ...
Q&Aご静聴ありがとうございました。
Upcoming SlideShare
Loading in …5
×

What's New in MySQL 5.7 Security

7,298 views

Published on

MySQL 5.7のセキュ率関係の新機能についての解説です。MySQL 5.7新機能攻略徹底講座で使用した資料です。

Published in: Software
  • Be the first to comment

What's New in MySQL 5.7 Security

  1. 1. 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 新機能徹底攻略講座
  2. 2. 免責事項 本プレゼンテーションにおいて示されている見解は、私 自身の見解であって、オラクル・コーポレーションの見 解を必ずしも反映したものではありません。ご了承くだ さい。
  3. 3. セキュリティ関係の新機能 ● パスワード期限の設定 ● ユーザーのロック、アンロック ● SET PASSWORD コマンドの仕様変更 ● CREATE USER … IF NOT EXISTS ● ログイン不可能なユーザーアカウント ● SSL のセットアップが容易に – キーファイルの自動生成 – mysql_ssl_rsa_setup ● 透過的テーブルスペース暗号化 ● デフォルトの状態がセキュアに – test データベースの廃止 – 匿名ユーザーの廃止 – localhost 以外の root の廃止
  4. 4. ALTER USER の 改良
  5. 5. ALTER USER コマンドの改良 ● MySQL 5.6 で追加されたコマンド – MySQL 5.6 でできたのは、パスワードを期限切れ( EXPIRED ) にすることだけ ● MySQL 5.7 では以下の機能が加わった – パスワード期限の設定 – パスワードの変更 – 認証プラグインの変更 – SSL 関係の設定 – アカウントのロック・アンロック – リソース制限の設定や変更 – プロキシーユーザーのマッピング
  6. 6. パスワード期限の 設定
  7. 7. 自動的にパスワードを 期限切れにする ● ユーザーにパスワードを定期的に変更させたい ● 期限を設定して自動的に EXPIRE ● ALTER USER myuser@localhost PASSWORD EXPIRE INTERVAL 200 DAY; – 200 日で期限切れになる ● 期限切れになったら – mysql コマンドでログインはできる – 実行可能なコマンドは SET PASSWORD のみ – パスワードを変更するまで何をしてもエラー 1820 になる
  8. 8. SET PASSWORD の仕様変更
  9. 9. SET PASSWORD の 書式が変更に ● 〜 MySQL 5.6 – SET PASSWORD = PASSWORD('new-password'); ● MySQL 5.7 – SET PASSWORD = 'new-password'; 新しい書式に慣れると 古いバージョンのサーバーを使うとき 混乱してしまうかも。 5.7 では ALTER USER を 使う手も有り。
  10. 10. ユーザーアカウントの ロック・アンロック
  11. 11. ユーザーアカウントのロック ● 一時的にユーザーアカウントを使用不能にしたい。 ● しかしユーザーアカウントを削除したくない。 ● そんな場合にロックしてしまいましょう。 – ALTER USER myuser@localhost ACCOUNT LOCK; – ALTER USER myuser@localhost ACCOUNT UNLOCK;
  12. 12. CREATE USER IF NOT EXISTS
  13. 13. CREATE USER IF NOT EXISTS ● ユーザーアカウントがない場合だけ作成する – 既にある場合には何もしない – CREATE USER IF NOT EXISTS myuser@localhost IDENTIFIED BY 'my-password'; ● バッチ処理などでエラーを出したくない場合に便利 ● 削除バージョンも有り – DROP USER IF EXISTS myuser@localhost;
  14. 14. ログイン不可な ユーザーアカウント
  15. 15. ログインができない ユーザーアカウントの使い道 ● ストアドプロシージャの実行ユーザー ● ビューの実行ユーザー ● イベントスケジューラーの実行ユーザー ● プロキシー対象ユーザー
  16. 16. 作成方法 ● プラグインのインストール – INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so'; ● ユーザーアカウントの作成 – CREATE USER nologinuser@localhost IDENTIFIED WITH 'mysql_no_login';
  17. 17. プロキシーユーザーの 利用範囲拡大
  18. 18. プロキシーユーザーとは ● 他のユーザーの権限を代理で拝借するユーザーのこと ● ログイン後に別のユーザー(プロキシー対象ユーザー)の権 限が付与される ● MySQL 5.6 では外部認証と組み合わせて利用される
  19. 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. 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)
  21. 21. プロキシーユーザーを 外部認証無しでも利用可能に ● 外部認証でないユーザーでもプロキシーユーザーによる認 証が可能に – ネイティブ認証 – SHA256 認証 ● ロールのような使用方法が可能 mysql> CREATE USER proxytest@localhost IDENTIFIED BY 'somepassword'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT PROXY ON developer@localhost TO proxytest@localhost; Query OK, 0 rows affected (0.00 sec) ネイティブ認証 プロキシー 権限付与
  22. 22. SSL の設定が 簡易化
  23. 23. MySQL サーバー起動時に 自動的に鍵を読み込み ● データディレクトリに鍵ファイルが存在する場合、 mysqld は 自動的にオプションを設定 – ssl_ca = ca.pem – ssl_cert = server-cert.pem – ssl_key = server-key.pem
  24. 24. MySQL サーバー起動時に 鍵を自動生成 ● データディレクトリに鍵ファイルが無ければ起動時に以下の ファイルを自動生成 – ca-key.pem – ca.pem – client-cert.pem – client-key.pem – private_key.pem – public_key.pem – server-cert.pem – server-key.pem ● OpenSSL とリンクしたもののみ – コミュニティ版のバイナリは YaSSL
  25. 25. mysql_ssl_rsa_setup ● 鍵ファイルを生成するコマンド – サーバー起動時に自動生成されるものと同じ – コマンド一発で作成 – 鍵ファイルは MySQL 5.6 以前でも使用可能
  26. 26. TLSv1.2 の サポート
  27. 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
  28. 28. クライアントの挙動が セキュアに
  29. 29. --ssl オプションの変更 ● --ssl オプションの意味が変更された – MySQL 5.6 まで ● SSL を利用可能であれば使うという意味 ● 利用可能でない場合エラーにならず非 SSL 通信 – えっ!? – MySQL 5.7 ● SSL の利用を強制 ● SSL が利用できない場合はエラー終了
  30. 30. SSL がデフォルトで有効化 ● SSL が利用可能な場合は SSL を利用するように ● MYSQL_OPT_SSL_VERIFY_SERVER_CERT を無効化 – クライアント証明書を検証するフラグ – MySQL 5.6 までは SSL 利用時に自動的に ON ● 付属のクライアントプログラムのみ ● libmysqlclient では自動的に ON にはならない – MySQL 5.7 では自動的に ON にならないようになった ● クライアント証明書がなくても SSL 利用可能
  31. 31. デフォルトの状態が セキュアに
  32. 32. 不要なユーザーアカウント等の廃止 ● MySQL 5.7 で廃止された初期設定 – 匿名ユーザー – test データベース – root@localhost 以外の管理者アカウント セキュリティ上のリスクに なりそうなものは 最初から作らない。
  33. 33. mysql_secure_installation ● MySQL 5.6 では Perl のスクリプトだった – ドライバによる接続ではなく、 mysql コマンドを呼び出す実 装(よくないね!!) – 役割は設定を安全にする ● root@localhost のパスワード設定 ● test データベースの削除 ● 匿名ユーザーの削除 ● localhost 以外の root ユーザーの削除 – MySQL 5.7 では下の 3 つは不要に・・・ ● MySQL 5.7 では C/C++ に書き換えられた – libmysqlclient を使用 – パスワードバリデーションプラグインの設定が追加された
  34. 34. まとめ
  35. 35. MySQL 5.7 のセキュリティは 超絶進化!! ● 安全性向上 – TLSv1.1/1.2 のサポート – サーバーはデフォルトの状態で安全に – クライアントの挙動も安全に ● 管理性向上 – ネイティブパスワード認証におけるプロキシーユーザー – ログイン不可なアカウントによるアクセス制限 – SSL セットアップの手順簡略化 – アカウントのロック・アンロック – パスワード期限の設定 – SET PASSWORD の 仕様変更 – ALTER USER コマンドの改良 もうこれは 使うしかない!!
  36. 36. Q&Aご静聴ありがとうございました。

×