検索
ホームページデータベースmysql チュートリアル【知っておくべき】MySQL を強化するために講じるべき 5 つの重要なセキュリティのヒント

【知っておくべき】MySQL を強化するために講じるべき 5 つの重要なセキュリティのヒント

データベースは長い間バランスのとれたアーキテクチャの重要な部分であり、おそらく最も重要な部分です。現在では、ほとんどが使い捨てでステートレスなインフラストラクチャに圧力がかかっており、他のすべてのサーバーが残りのデータとともに必然的にサーバー上に存在することになるため、データベースの信頼性と安全性の両方に大きな負担がかかっています。データベースに保存されます。

データベースはすべての攻撃者の宝物です。攻撃がより巧妙になり、ネットワークがより敵対的になるにつれて、データベースを強化するための追加の措置を講じることがこれまで以上に重要になっています。

MySQL は、その速度と全体的な使いやすさにより、開発者や管理者の間で最も人気があり、お気に入りのデータベースです。残念ながら、この使いやすさはセキュリティを犠牲にしています。 MySQL は厳密なセキュリティ制御を使用して構成できますが、通常のデフォルトの MySQL 構成ではそれらの制御が使用されない場合があります。この記事では、MySQL データベースを強化するために実行する必要がある 5 つの重要な手順について説明します。

ステップ 1: 強力なパスワードを設定する

すべてのデータベース ユーザーにとって、強力なパスワードを使用することが重要です。ほとんどの人は手動でデータベースに頻繁にログインしないことを考慮して、パスワード マネージャーまたはコマンド ライン ツール pwgen を使用して、データベース アカウント用にランダムな 20 文字のパスワードを作成します。これは、追加の MySQL アクセス制御を使用して、特定のアカウントがログインできる場所を制限する場合でも (アカウントをローカルホストに厳密に制限するなど)、依然として重要です。

パスワードを設定する最も重要な MySQL アカウントは root ユーザーです。デフォルトでは、多くのシステムでは、このユーザーにはパスワードがありません。特に、Red Hat ベースのシステムでは、MySQL のインストール時にパスワードが設定されません。Debian ベースのシステムでは、対話型インストール中にパスワードの入力を求められますが、非対話型インストール (Configuration Manager を使用する場合など) ではパスワードがスキップされます。さらに、対話型インストール中にパスワードの設定をスキップすることもできます。

root ユーザーにパスワードを入力させないことは、大きなセキュリティ リスクではないと考えるかもしれません。結局のところ、ユーザーは「root@localhost」に設定されています。これは、そのユーザーになる前にコンピューターを root 化する必要があることを意味すると思われるかもしれません。残念ながら、これは、localhost から MySQL クライアントをトリガーできるユーザーは、次のコマンドを使用して MySQL root ユーザーとしてログインできることを意味します:

*$ mysql — user root*

したがって、root ユーザーのパスワードを設定しない場合、MySQL マシン上でローカル シェルを取得できる人は誰でもデータベースを完全に制御できるようになります。

この脆弱性を修正するには、mysqladmin コマンドを使用して root ユーザーのパスワードを設定します:

$ sudo mysqladmin password

残念ながら、MySQL は実行されます。 root として ユーザーとしてバックグラウンド タスクを実行します。パスワードを設定すると、/root/.my.cnf ファイルにパスワードをハードコードする追加の手順を実行しない限り、これらのタスクは中断されます。

[mysqladmin]
user = rootpassword = yourpassword

ただし、これは、パスワードをプレーン テキストで設定する必要があることを意味します。フォームはホスト マシンに保存されます。ただし、少なくとも Unix ファイル権限を使用して、ファイルへのアクセスを root ユーザーのみに制限することはできます。

sudo chown root:root /root/.my.cnf
sudo chmod 0600 /root/.my.cnf

ステップ 2: 匿名ユーザーを削除する

匿名アカウントは両方ともユーザー名とパスワードのない MySQL アカウント。攻撃者がパスワードなしでデータベースにいかなる種類のアクセスもできないようにするため、このコマンドの出力で、空のユーザー名でログインした MySQL ユーザーを調べます。

> SELECT Host, User FROM mysql.user;
+ — — — — — — — — — — — — + — — — -+
| Host | User |
+ — — — — — — — — — — — — + — — — -+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | |
| localhost | root |
+ — — — — — — — — — — — — + — — — -+
4 rows in set (0.00 sec)

がこれらのルートにあります。ユーザーの中の匿名ユーザー ( l​​ocalhost )。「ユーザー」列は空です。次のコマンドを使用して、特定の匿名ユーザーをクリアできます。

> drop user ""@"localhost";
> flush privileges;

他に匿名ユーザーを見つけた場合は、必ず削除してください。

#ステップ 3: 最小特権の原則に従う

最小特権の原則は、次のように要約できるセキュリティ原則です。

Just for アカウントはジョブの実行に必要なアクセスを提供するだけで、それ以上のアクセスは提供しません。

この原則は、さまざまな方法で MySQL に適用できます。まず、GRANT コマンドを使用して特定のユーザーにデータベース権限を追加するときは、ユーザーがデータベースにアクセスするために必要な権限のみを制限するようにしてください。

> grant all privileges on mydb.* to someuser@"localhost" identified by 'astrongpassword';
> flush privileges;
ユーザーが特定のテーブルにのみアクセスする必要がある場合 (たとえば、users テーブル)、

mydb.users またはテーブルの任意の名前を mydb.* に置き換えます (すべてのテーブルに権限を付与します)。

多くの人はユーザーにデータベースへのフル アクセスを許可しますが、データベース ユーザーがデータを読み取るだけでデータを変更する必要がない場合は、データベースへの読み取り専用アクセスを許可するという追加の手順を実行する必要があります。 :

> grant select privileges on mydb.* to someuser@"localhost" identified by 'astrongpassword';
> flush privileges;
最後に、多くのデータベース ユーザーはローカルホストからデータベースにアクセスしません。通常は管理者が次のように作成します:

> grant all privileges on mydb.* to someuser@"%"  identified by 'astrongpassword';
> flush privileges;
これにより、「someuser」はどこからでもデータベースにアクセスできるようになります。通信網。ただし、明確に定義された内部 IP のセットがある場合、またはすべてのアプリケーション サーバーが他のホストとは異なるサブネット上に存在するように VLAN が設定されている場合は、これを利用して "someuser" を制限できます。アカウントが特定のネットワークからのみデータベースにアクセスできるようにします:

> grant all privileges on mydb.* to someuser@10.0.1.0/255.255.255.0 identified by 'astrongpassword';
> flush privileges;

第四步:启用 TLS

设置强密码仅只有攻击者可以在网络上读取你的密码或者其他敏感数据的情况下才能达到此目的。因此,使用 TLS 保护你的所有网络流量比以往任何时候都更加重要。

MySQL 也不例外。

幸运的是,在 MySQL 中启用 TLS 比较简单。一旦你有了你的主机的有效证书,只需要在你的主 my.cnf 文件的 [mysqld]部分添加以下几行 :

[mysqld]
ssl-ca=/path/to/ca.crt
ssl-cert=/path/to/server.crt
ssl-key=/path/to/server.key

为了额外的安全性,还可以添加 ssl-cipher 配置选项,其中包含一个被认可的密码列表,而不是只接受默认的密码列表,这可能包括较弱的 TLS 密码。我推荐使用  Mozilla Security/Server Side TLS page 所推荐的现代或者中级密码套件。

一旦服务器端设置了 TLS ,你可以限制客户端必须采用 TLS 进行连接,通过在 GRANT 语句中添加 REQUIRE SSL :

> grant all privileges on mydb.* to someuser@10.0.1.0/255.255.255.0 identified by 'astrongpassword' REQUIRE SSL;

> flush privileges;

第五步:加密数据库密钥

虽然现在很多人都知道使用单向散列(理想情况下是像 bcrypt 这样慢速散列 ),保护用户数据库存储的密码有多重要,但通常没过多考虑使用加密来保护数据库上其他的敏感数据。事实上,许多管理员会告诉你他们的数据库是加密的,因为磁盘本身是加密的。这实际上会影响你的数据库加固,不是因为磁盘加固有缺陷或糟糕的做法,而是因为它会给你一种错误的信任感。

磁盘加密保护你的数据库数据,以防止有人从你的服务器窃取磁盘(或者你买了二手磁盘后忘记擦除磁盘),但是磁盘加密并不能在数据库本身运行时保护你,因为驱动器需要处于解密状态才能被读取。

要保护数据库中的数据,你需要采取额外的措施,在存储敏感字段之前对它们进行加密。这样如果攻击者找到了某种方法来转存完整的数据库,你的敏感字段仍然会受到保护。

有许多加密数据库中字段的方法,而且 MySQL 支持本地加密命令。无论你采取哪种加密方法,我都建议避免你需要将解密密钥存储在数据库本身的加密方法。

理想情况下,你会把解密的密钥存储在应用服务器上,作为本地GPG密钥(如果你使用GPG进行加密)或者将其存储为应用程序服务器上的环境变量。这样即使攻击者可能找到一种方法来破坏应用程序服务器的服务器,他也必须将攻击转换为本地shell访问,以此来获取你的解密密钥。

MySQL 加固原则:掌握最小权限原则

有很多方法来锁定你的MySQL服务器。确切地说,你如何实施这些步骤取决于你如何设置自己的数据库,以及它在网络中的位置。

虽然前面的五个步骤将有助于保护你的数据库,但我认为更需要掌握的最重要的整体步骤是最小权限原则。你的数据库可能存储来一些非常有用的数据,如果你确保用户和应用程序只具有执行其工作的所需的最小访问权限,那么你将限制攻击者能够做什么,如果黑客找到来危害该用户或者应用程序的方法。

【相关推荐:mysql视频教程

以上が【知っておくべき】MySQL を強化するために講じるべき 5 つの重要なセキュリティのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQLのライセンスは、他のデータベースシステムと比較してどうですか?MySQLのライセンスは、他のデータベースシステムと比較してどうですか?Apr 25, 2025 am 12:26 AM

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

MyisamよりもInnodbを選びますか?MyisamよりもInnodbを選びますか?Apr 25, 2025 am 12:22 AM

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLの外国キーの目的を説明してください。MySQLの外国キーの目的を説明してください。Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLのインデックスのさまざまなタイプは何ですか?MySQLのインデックスのさまざまなタイプは何ですか?Apr 25, 2025 am 12:12 AM

MySQLには、B-Treeインデックス、ハッシュインデックス、フルテキストインデックス、空間インデックスの4つのメインインデックスタイプがあります。 1.B-Treeインデックスは、範囲クエリ、ソート、グループ化に適しており、従業員テーブルの名前列の作成に適しています。 2。HASHインデックスは、同等のクエリに適しており、メモリストレージエンジンのHASH_TABLEテーブルのID列の作成に適しています。 3。フルテキストインデックスは、記事テーブルのコンテンツ列の作成に適したテキスト検索に使用されます。 4.空間インデックスは、地理空間クエリに使用され、場所テーブルのGEOM列での作成に適しています。

MySQLでインデックスをどのように作成しますか?MySQLでインデックスをどのように作成しますか?Apr 25, 2025 am 12:06 AM

tocreateanindexinmysql、usethecreateindexstatement.1)forasinglecolumn、 "createdexidx_lastnameonemployees(lastname);" 2)foracompositeindexを使用して、 "createindexidx_nameonemployees(lastname、firstname);" 3); "3)、" 3)を使用します

MySQLはSQLiteとどのように違いますか?MySQLはSQLiteとどのように違いますか?Apr 24, 2025 am 12:12 AM

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?Apr 24, 2025 am 12:09 AM

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。Apr 24, 2025 am 12:09 AM

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません