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 集計関数の利用

先日同様、ある程度複雑な問題のSQLに関して。出典はSQL実践入門。 問題 下記のようなテーブル(テーブル名)で より古い年のデータが存在しない場合 NULL 直近の年のデータより売り上げが伸びた場合 …

no image

HAVING句がらみの計算式

「達人に学ぶSQL徹底指南書」読んでますが、かなり難しいものがでてきましたね。 テーブルは前回のものと同じ以下のものを使います。 name | income ————+——– サンプソン | 4000 …

no image

SQL case式やウィンドウ関数の威力

プログラマには「プログラムは思った通りに動かない。書いた通りに動く。」「バグではない仕様です」なんて面白い格言がいろいろありますが、データベースの世界にも「WHERE句で条件分岐させるのは素人のやるこ …

no image

persistence.xmlのプロパティについて

JavaEEではデータベースとの設定情報はpersistence.xmlに記述します。 (ユーザー名、パスワード、ポート、driver名、データベース名などの情報はglassfish-resource …

no image

インデックスについて(SQLServer)

DBのインデックスについて、今までぼんやりと検索条件の効率化についてはしっていたのですが、もう少し掘り下げて理解する必要があるなと思い、メモります。 SQLServerのインデックスについてすごくまと …

アーカイブ