データベース システムのセキュリティには多くの側面が含まれます。多くの場合、データベース サーバーはクライアントがネットワークから接続できるようにするため、クライアント接続のセキュリティは MySQL データベースのセキュリティに非常に重要な影響を与えます。
クライアントのコマンドラインにパスワードを入力しないでください
mysql、mysqladmin などのクライアントを使用してユーザー ID で MySQL サーバーに接続する場合、接続用のパスワードを入力する必要があります。
1. コマンドラインでパスワードを指定できます
shell>mysql –u root –pmypass
-p オプションとパスワードの間にスペースがあってはいけないことに注意してください、そうでない場合は、パスワードの入力を求められますそしてエラーが報告されます。
長い形式も使用できます
shell>mysql –user=root –password=mypass
そうすることによる結果を調べることができます:
Unix の場合、$ps –aux grep mysql
win9x の場合、Ctrl+Alt+Del キーを押したままにすることができ、NT ではタスク マネージャーを開くことができます。
何を見つけましたか? 目の前にパスワードがはっきりと表示されていることがわかりました。したがって、これは決して行わないでください。
そのため、クライアントにパスワードの入力を求めるようにする必要があります:
shell>mysql –u root –p
オプション ファイルを使用してパスワードを指定することもできますが、セキュリティ上の理由から、パスワードは使用できないことに注意してください。オプションファイルに保存されます。パスワード オプションのみを指定して、クライアントにパスワードの入力を求めるようにすることもできます。
SSH を使用してクライアント接続を暗号化する
これは、SSH を使用してリモート MySQL サーバーへの安全な接続を取得する方法に関するメモです (David Carlson)。
Windows マシンに SSH クライアントをインストールします - 私は の無料の SSH クライアントを使用しました。その他の便利なリンク:
.
SSH を開始します。 hostname = MySql サーバー名または IP アドレスに設定し、userid = サーバーにログインするためのユーザー名に設定します。
「ローカルフォワード」をクリックします。ローカルポート: 3306、ホスト: localhost、リモートポート: 3306 を設定します
すべてを保存しないと、次回もう一度実行する必要があります。
SSH を使用してサーバーにログインします。
いくつかのODBCアプリケーション(Accessなど)を起動します。
サーバーにユーザー「localhost」を使用することを除いて、通常と同じように、新しいファイルを作成し、ODBC ドライバーを使用して mySQL に接続します。
完了。インターネットに直接接続すると正常に動作します。
MySQL デーモンプロセスを実行するために Unix の root ユーザーを使用しないでください
MySQL デーモンプロセスを Unix の root ユーザーとして実行しないでください。 mysqld は任意のユーザーとして実行できますが、すべてをより安全にするために新しい Unix ユーザー mysql を作成することもできます。別の Unix ユーザーとして mysqld を実行している場合、MySQL ユーザー名は Unix ユーザー名と何の関係もないため、ユーザー テーブルの root ユーザー名を変更する必要はありません。
mysql.server 起動スクリプト mysqld を別の Unix ユーザーとして編集できます。または、オプション ファイルを使用します。 MySQL サーバーを非 root ユーザーとして起動する方法の詳細については、第 2 章を参照してください。
データベースディレクトリのセキュリティ
MySQLサーバーは、mysqlデータベース内の認可テーブルを通じて非常に柔軟な権限システムを提供し、ネットワークからアクセスされるデータのセキュリティを確保します。ただし、サーバー ホスト上の他のユーザーがサーバー ディレクトリに直接アクセスできる場合、サーバーのデータは依然として安全ではありません。
通常、権限のない Unix ユーザーを使用してデーモンを実行できます。 mysqld を実行している Unix ユーザーが、データベース ディレクトリ内で読み取り/書き込み権限を持つ唯一のユーザーであることを確認してください。
セキュリティ上の脆弱性の可能性
明らかに、サーバーホスト上の他のユーザーにデータベースディレクトリファイルへの書き込みアクセスを与えることはありませんが、読み取りアクセスだけでも非常に危険です。
GRANT や SET PASSWORD などのクエリがログに記録されるため、通常のログ ファイルと更新ログ ファイルには、パスワードに関する機密のクエリ テキストが含まれます。攻撃者がこれらのログへの読み取りアクセス権を持っている場合、ログ ファイル内で GRANT や PASSWORD などの機密用語を検索することで、パスワードの平文を簡単に見つけることができます。
テーブルファイルへの読み取りアクセスも危険であり、ファイルを盗んでMySQLにテーブルの内容をプレーンテキストで表示させることは簡単です。次の手順に従ってください:
1. 公式サーバードキュメントの異なるポート、ソケット、データを使用して、別のホストまたは現在のサーバーホストに新しい MySQL ディストリビューションをインストールします。
2. 盗まれたテーブルの対応するファイルを新しいサービスデータベースディレクトリのテストディレクトリにコピーします
3. その後、犯罪サーバーを起動して、盗まれたテーブルの内容に自由にアクセスできます。
Unix で適切なデータベース ディレクトリのアクセス許可を設定します
これらのセキュリティ ホールを排除したい場合は、サーバーを起動する専用アカウントのみがアクセスできるように、データベース ディレクトリとその中のすべてのファイルとディレクトリの所有権を調整する必要があります。彼ら。手順は次のとおりです:
1. root ユーザーに切り替えます
$su
2. データベースディレクトリとその中のすべてのファイルディレクトリの所有権を、サーバーを実行しているアカウントに設定します。この本では、このアカウントは常に mysql であるとみなされ、すべてのグループはルートグループに設定されます
%chown – R mysql:root DATADIR
3. データベースディレクトリとその中のすべてのファイルディレクトリの権限を変更して、所有者のみが読み書きできるようにします
%chmod –R go-rwx DATADIR
適切なデータベースディレクトリの権限を設定しますNT システム
NT システムの場合 データベース ディレクトリのセキュリティは比較的単純かもしれません:
読者は、たとえば、すべてのディレクトリ ファイルを、特定のアカウント管理者のみが読み書きできるように変更することを考えるかもしれません。ただし、これには問題があります。つまり、管理者アカウントで独立したサーバーを手動で起動できるということです。mysql システム サービスを自動的に起動する方法が実行できない場合、解決策はデータベース ディレクトリも読み取り可能にすることです。このようにして、MySQL サーバーはシステム サービス メソッドを使用して自動的に起動することも、net start mysql を使用して任意のアカウントで起動することもできます。
もう 1 つの問題は、あなたが非管理者グループのユーザーである場合、またはネットワークからのユーザーである場合、データベース ディレクトリを通常に使用したい場合は、データベース ディレクトリへの読み取り権限がないため、データベース接続を確立できないことです。書き込み権限が必要です。解決策は、SYSTEM グループのユーザーにデータベース ディレクトリへの読み取りと書き込みを許可することです。
ライセンスとコストの理由により、通常は Linux サーバーで MySQL を使用し、テストやデータ入力作業には Windows プラットフォームで MySQL を使用することをお勧めします。ただし、Windows で使用する場合は、このセクションのいくつかの内容に注意してください。
セキュリティに影響を与える MySQL オプション
次の mysqld オプションはセキュリティに影響します:
--secure
gethostbyname() システム コールによって返された IP 番号は、元のホスト名に解決されることを確認するためにチェックされます。これにより、部外者が他のホストになりすましてアクセスすることがより困難になります。このオプションでは、賢いホスト名チェックも追加されます。 MySQL 3.21 では、逆解析の実行に時間がかかる場合があるため、選択はデフォルトでオフになっています。 MySQL 3.22 はホスト名をキャッシュし、このオプションがデフォルトで有効になっています。
--skip-grant-tables
このオプションにより、サーバーは許可システムをまったく使用しなくなります。これにより、全員がすべてのデータベースに完全にアクセスできるようになります (mysqladmin リロードを実行することで、実行中のサーバーに再度許可テーブルの使用を開始するように指示できます)
--skip-name-resolve
ホスト名は解析されません。認可テーブルのすべてのホスト列の値は、IP 番号またはローカルホストである必要があります。
--skip-networking
ネットワーク上では TCP/IP 接続は許可されません。 mysqld へのすべての接続は Unix ソケット経由で行う必要があります。 MIT-pthreads パッケージは Unix ソケットをサポートしていないため、このオプションは MIT-pthreads を使用するシステムには適していません。