36
What's New in What's New in MySQL 5.7 Security MySQL 5.7 Security 奥野 幹也 Twitter: @nippondanji mikiya (dot) okuno (at) gmail (dot) com @MySQL 5.7 新機能徹底攻略講座

What's New in MySQL 5.7 Security

Embed Size (px)

Citation preview

Page 1: What's New in MySQL 5.7 Security

What's New inWhat's New inMySQL 5.7 SecurityMySQL 5.7 Security

奥野 幹也Twitter: @nippondanjimikiya (dot) okuno (at) gmail (dot) com

@MySQL 5.7 新機能徹底攻略講座

Page 2: What's New in MySQL 5.7 Security

免責事項本プレゼンテーションにおいて示されている見解は、私自身の見解であって、オラクル・コーポレーションの見解を必ずしも反映したものではありません。ご了承ください。

Page 3: What's New in MySQL 5.7 Security

セキュリティ関係の新機能

● パスワード期限の設定● ユーザーのロック、アンロック● SET PASSWORD コマンドの仕様変更● CREATE USER … IF NOT EXISTS● ログイン不可能なユーザーアカウント● SSL のセットアップが容易に

– キーファイルの自動生成– mysql_ssl_rsa_setup

● 透過的テーブルスペース暗号化● デフォルトの状態がセキュアに

– test データベースの廃止– 匿名ユーザーの廃止– localhost 以外の root の廃止

Page 4: What's New in MySQL 5.7 Security

ALTER USERの改良

Page 5: What's New in MySQL 5.7 Security

ALTER USER コマンドの改良● MySQL 5.6 で追加されたコマンド

– MySQL 5.6 でできたのは、パスワードを期限切れ( EXPIRED )にすることだけ

● MySQL 5.7 では以下の機能が加わった– パスワード期限の設定– パスワードの変更– 認証プラグインの変更– SSL 関係の設定– アカウントのロック・アンロック– リソース制限の設定や変更– プロキシーユーザーのマッピング

Page 6: What's New in MySQL 5.7 Security

パスワード期限の設定

Page 7: What's New in MySQL 5.7 Security

自動的にパスワードを期限切れにする

● ユーザーにパスワードを定期的に変更させたい● 期限を設定して自動的に EXPIRE● ALTER USER myuser@localhost PASSWORD EXPIRE INTERVAL 200 DAY;

– 200 日で期限切れになる● 期限切れになったら

– mysql コマンドでログインはできる– 実行可能なコマンドは SET PASSWORD のみ– パスワードを変更するまで何をしてもエラー 1820 になる

Page 8: What's New in MySQL 5.7 Security

SET PASSWORDの仕様変更

Page 9: What's New in MySQL 5.7 Security

SET PASSWORDの書式が変更に

● 〜 MySQL 5.6– SET PASSWORD = PASSWORD('new-password');

● MySQL 5.7– SET PASSWORD = 'new-password';

新しい書式に慣れると古いバージョンのサーバーを使うとき

混乱してしまうかも。5.7 では ALTER USER を

使う手も有り。

Page 10: What's New in MySQL 5.7 Security

ユーザーアカウントのロック・アンロック

Page 11: What's New in MySQL 5.7 Security

ユーザーアカウントのロック

● 一時的にユーザーアカウントを使用不能にしたい。● しかしユーザーアカウントを削除したくない。● そんな場合にロックしてしまいましょう。

– ALTER USER myuser@localhost ACCOUNT LOCK;– ALTER USER myuser@localhost ACCOUNT UNLOCK;

Page 12: What's New in MySQL 5.7 Security

CREATE USERIF NOT EXISTS

Page 13: What's New in MySQL 5.7 Security

CREATE USERIF NOT EXISTS

● ユーザーアカウントがない場合だけ作成する– 既にある場合には何もしない– CREATE USER IF NOT EXISTS myuser@localhost IDENTIFIED BY 'my-password';

● バッチ処理などでエラーを出したくない場合に便利● 削除バージョンも有り

– DROP USER IF EXISTS myuser@localhost;

Page 14: What's New in MySQL 5.7 Security

ログイン不可なユーザーアカウント

Page 15: What's New in MySQL 5.7 Security

ログインができないユーザーアカウントの使い道

● ストアドプロシージャの実行ユーザー● ビューの実行ユーザー● イベントスケジューラーの実行ユーザー● プロキシー対象ユーザー

Page 16: What's New in MySQL 5.7 Security

作成方法

● プラグインのインストール– INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';

● ユーザーアカウントの作成– CREATE USER nologinuser@localhost IDENTIFIED WITH 'mysql_no_login';

Page 17: What's New in MySQL 5.7 Security

プロキシーユーザーの利用範囲拡大

Page 18: What's New in MySQL 5.7 Security

プロキシーユーザーとは

● 他のユーザーの権限を代理で拝借するユーザーのこと● ログイン後に別のユーザー(プロキシー対象ユーザー)の権

限が付与される● MySQL 5.6 では外部認証と組み合わせて利用される

Page 19: What's New in MySQL 5.7 Security

ユーザー作成例

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)

Page 20: What's New in MySQL 5.7 Security

認証実行例

shell> cat /etc/pam.d/mysql#%PAM-1.0auth include system-loginaccount include system-login

shell> mysql -u myuser -p --enable-cleartext-pluginEnter password:

mysql> SELECT USER(), @@proxy_user, CURRENT_USER();+------------------+--------------+---------------------+| USER() | @@proxy_user | CURRENT_USER() |+------------------+--------------+---------------------+| myuser@localhost | ''@'' | developer@localhost |+------------------+--------------+---------------------+1 row in set (0.00 sec)

Page 21: What's New in MySQL 5.7 Security

プロキシーユーザーを外部認証無しでも利用可能に

● 外部認証でないユーザーでもプロキシーユーザーによる認証が可能に

– ネイティブ認証– 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)

ネイティブ認証

プロキシー権限付与

Page 22: What's New in MySQL 5.7 Security

SSLの設定が簡易化

Page 23: What's New in MySQL 5.7 Security

MySQL サーバー起動時に自動的に鍵を読み込み

● データディレクトリに鍵ファイルが存在する場合、 mysqld は自動的にオプションを設定

– ssl_ca = ca.pem– ssl_cert = server-cert.pem– ssl_key = server-key.pem

Page 24: What's New in MySQL 5.7 Security

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

Page 25: What's New in MySQL 5.7 Security

mysql_ssl_rsa_setup● 鍵ファイルを生成するコマンド

– サーバー起動時に自動生成されるものと同じ– コマンド一発で作成– 鍵ファイルは MySQL 5.6 以前でも使用可能

Page 26: What's New in MySQL 5.7 Security

TLSv1.2 のサポート

Page 27: What's New in MySQL 5.7 Security

TLSv1.2のサポート● MySQL 5.0 〜 MySQL 5.6

– TLSv1● MySQL 5.7

– w/OpenSSL … TLSv1, TLSv1.1, TLSv1.2– w/YaSSL … TLSv1, TLSv1.1

Page 28: What's New in MySQL 5.7 Security

クライアントの挙動がセキュアに

Page 29: What's New in MySQL 5.7 Security

--sslオプションの変更● --ssl オプションの意味が変更された

– MySQL 5.6 まで● SSL を利用可能であれば使うという意味● 利用可能でない場合エラーにならず非 SSL通信

– えっ!?– MySQL 5.7

● SSL の利用を強制● SSL が利用できない場合はエラー終了

Page 30: What's New in MySQL 5.7 Security

SSLがデフォルトで有効化● SSL が利用可能な場合は SSL を利用するように● MYSQL_OPT_SSL_VERIFY_SERVER_CERT を無効化

– クライアント証明書を検証するフラグ– MySQL 5.6 までは SSL 利用時に自動的に ON

● 付属のクライアントプログラムのみ● libmysqlclient では自動的に ON にはならない

– MySQL 5.7 では自動的に ON にならないようになった● クライアント証明書がなくても SSL 利用可能

Page 31: What's New in MySQL 5.7 Security

デフォルトの状態がセキュアに

Page 32: What's New in MySQL 5.7 Security

不要なユーザーアカウント等の廃止

● MySQL 5.7 で廃止された初期設定– 匿名ユーザー– test データベース– root@localhost 以外の管理者アカウント

セキュリティ上のリスクになりそうなものは最初から作らない。

Page 33: What's New in MySQL 5.7 Security

mysql_secure_installation● MySQL 5.6 では Perl のスクリプトだった

– ドライバによる接続ではなく、 mysql コマンドを呼び出す実装(よくないね!!)

– 役割は設定を安全にする● root@localhost のパスワード設定● test データベースの削除● 匿名ユーザーの削除● localhost 以外の root ユーザーの削除

– MySQL 5.7 では下の 3つは不要に・・・● MySQL 5.7 では C/C++に書き換えられた

– libmysqlclient を使用– パスワードバリデーションプラグインの設定が追加された

Page 34: What's New in MySQL 5.7 Security

まとめ

Page 35: What's New in MySQL 5.7 Security

MySQL 5.7のセキュリティは超絶進化!!

● 安全性向上– TLSv1.1/1.2 のサポート– サーバーはデフォルトの状態で安全に– クライアントの挙動も安全に

● 管理性向上– ネイティブパスワード認証におけるプロキシーユーザー– ログイン不可なアカウントによるアクセス制限– SSL セットアップの手順簡略化– アカウントのロック・アンロック– パスワード期限の設定– SET PASSWORD の

仕様変更– ALTER USER コマンドの改良

もうこれは使うしかない!!

Page 36: What's New in MySQL 5.7 Security

Q&Aご静聴ありがとうございました。