skillup

技術ブログ

Database

MySQLのセキュアな設定

投稿日:2017年3月6日 更新日:

以前SSHの設定についていろいろ書いたんで今回はMySQLに関して。

基本的な処方箋(MySQLに限らないかも)

  • ウィルスソフトのインストール
  • できればデータベースサーバーとアプリのサーバーは分ける
  • ポートを閉じる
  • 入れるソフトは必要最小限
  • アップデートやパッチは最新のものを取り入れよう
  • 基本的な考え方としては権限をなるべく小さくする

ホストのアクセスを制限する

全て /etc/my.cnf へ入力です。

ローカルのみの接続にする

上記を/etc/my.cnfにいれるとローカルのみの接続になります。

また下記のように書くとつなげることのできるホストを制限できます。

LOCAL INFILEコマンドを無効にする

これまた不正な攻撃を許してしまうので、使用不能にしてしまいましょう。

昔はCSVを入れたりしたときに使ったんですけど、今はあまり使わないですな。

rootのユーザー名とパスワードを変更

rootユーザーは最大の権限を持つユーザーであり、非常に危険なので、絶対に使われてはいけません。

そこでセキュアな設定としてはrootユーザーの名称とパスワードを変更してしまうことです。

パスワードを変更するのはよくあることだけどユーザー名を変更するという発想はなかったですね。

テストデータベースや匿名ユーザーの消去

普段、使っているとあまり気づきませんが、ディフォルトでtest databaeやパスワード無しの匿名ユーザーが設定されています。特に意図がなければ消してしまいましょう。MySQL5.7からは最初の設定のrootパスワード変更時オプションで消えるようになっております。

設定できる範囲であらゆる権限を低くする

例えばmysqlディレクトリですが、こちらもrootユーザーやmysqlユーザー以外には入れないようにしましょう。

ディレクトリやファイルの権限を弱くしましょう。

またshow databasesは簡単に全データベースの情報を与えてしまうコマンドなのでできればセーブしましょう。下記で使えなくすることが可能です。

他にもありますが、とりあえずこれぐらいで。

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

SQLの高速化について&explain

本日はSQLの高速化について。 高速化といってもさまざまなテクがあると思うのですが、代表的な考え方に関して。 Contents1 高速化に関して1.1 index1.2 ディスクアクセスを減らす1.3 …

no image

joinとeager loading

フレームワークでデータをORMがらみでjoinするときのネタ。 自分の場合はLaravel。他のフレームワークでも考え方は通じるものあるかと・・ Contents1 通常のjoin2 ループの中で取得 …

no image

SQL結合 サブクエリに関して

今回はサブクエリに関してです。 もちろんSQL実践入門を読み進めています。 SQL上ではテーブル、ビュー、サブクエリというのは機能的にはそれほど変わらず主にパフォーマンスの点で違いがでてきます。 以下 …

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

MySQLのLIMIT,OFFSETに関して&explainの見方など

自作のWEBアプリを作っていたところSELECT句が異常に遅いケースがありました。 発見までにかなり時間がかかったんですが、不可思議な現象としてはOFFSETが小さいときと大きいときで検索スピードが全 …