Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
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ご静聴ありがとうございました。
Próxima SlideShare
Cargando en…5
×

What's New in MySQL 5.7 Security

7.458 visualizaciones

Publicado el

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

Publicado en: Software
  • Sé el primero en comentar

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ご静聴ありがとうございました。

×