この記事では主に MySQL の権限を紹介し、各権限で操作できるトランザクションや、権限を操作するための一般的なコマンド ステートメントなどを紹介します。お困りの皆様の参考になれば幸いです。
1. はじめに
多くの記事では、データベースの権限は最小権限の原則に基づいていると書かれていますが、この文自体は間違っていませんが、空虚な話です。最小限のアクセス許可のため、これは抽象的すぎて、どのようなアクセス許可が必要なのか正確にわからないことがよくあります。 現在、多くの MySQL 操作では root アカウントが使用されています。root 権限の使用が非常に危険であることを誰もが知らないわけではありませんが、安全でありながら通常の動作を保証するためにどのような種類の権限を与えるべきかを知らない人が多いのです。したがって、この記事では、この場合に安全な mysql を簡単に構成する方法を検討することに重点を置いています。注: この記事のテスト環境は mysql-5.6.4 です
2. Mysql パーミッションの概要
mysql にはパーミッションを制御する 4 つのテーブル、つまり user テーブル、db テーブル、tables_priv テーブル、columns_priv テーブルがあります。
mysql 権限テーブルの検証プロセスは次のとおりです:
1. まず、ユーザー テーブルのホスト、ユーザー、パスワードの 3 つのフィールドから、接続されている IP、ユーザー名、およびパスワードが存在するかどうかを判断します。検証はパスされます。
2. ID認証に合格したら、user、db、tables_priv、columns_privの順に権限を割り当てて確認します。つまり、最初にグローバル権限テーブル ユーザーを確認します。 user の対応する権限が Y の場合、このユーザーのすべてのデータベースに対する権限は Y になります。N の場合は、db、tables_priv、columns_priv はチェックされなくなります。 db テーブルでユーザーに対応する特定のデータベースを取得し、db での権限 Y を取得します。db での権限が N の場合は、tables_priv でデータベースに対応する特定のテーブルを確認し、そのテーブルで権限 Y を取得します。すぐ。
3. mysql にはどのような権限がありますか
4. データベースレベル (db テーブル) での権限分析
5. MySQL のセキュリティ構成計画
1 制限 mysql ポートにアクセスする IP
Windows では Windows ファイアウォールまたは ipsec を通じて制限でき、Linux では iptables を通じて制限できます。
2 mysql ポートを変更する
Windows では設定ファイル my.ini を変更でき、Linux では設定ファイル my.cnf を変更できます。
3 すべてのユーザーに強力なパスワードを設定し、対応するアカウントのアクセス IP を厳密に指定します
mysql では、ユーザーのアクセス IP をユーザーテーブルで指定できます
4 root 特権アカウントの取り扱い
を設定することをお勧めしますroot アカウントに強力なパスワードを設定し、ローカル ログインのみが許可されるように指定します
5 ログ処理
必要に応じて、クエリ ログをオンにすることができ、クエリ ログにはログインとクエリ ステートメントが記録されます。
6 mysql プロセス実行アカウント
Windows で mysql アカウントを実行するためにローカル システムを使用することは禁止されています。ネットワーク サービスを使用するか、自分で新しいアカウントを作成することを検討できますが、mysql プログラムが存在するディレクトリに読み取り権限を与える必要があります。 Linux では、新しい mysql アカウントを作成し、インストール中に mysql アカウントとして実行するように指定し、プログラムが配置されているディレクトリへの読み取り権限と、データ ディレクトリへの読み取りおよび書き込み権限を与えます。データが置かれているディレクトリ。
7 mysql 実行アカウントのディスク権限
1) mysql 実行アカウントには、プログラムが配置されているディレクトリへの読み取り権限と、データ ディレクトリへの読み取りおよび書き込み権限が与えられる必要があります
2) 書き込みと実行他のディレクトリ、特に Web サイトのディレクトリへのアクセス許可は許可されません。
3) cmd、sh、およびその他のプログラムの mysql 実行アカウントの実行権限をキャンセルします。
8 Web サイトで使用される mysql アカウントを処理する方法
新しいアカウントを作成し、そのアカウントに使用するデータベース内のすべての権限を与えます。これにより、Web サイトが対応するデータベースを完全に操作できることが保証されるだけでなく、過剰な権限によってアカウントがセキュリティに影響を与えないようにすることもできます。単一データベースに対するすべての権限が付与されたアカウントには、スーパー、プロセス、ファイル、その他の管理権限はありません。 もちろん、自分の Web サイトに必要な権限が明確にわかっている場合は、それ以上の権限を与えない方が良いでしょう。多くの場合、発行者は Web サイトに必要な権限を知らないため、上記の構成のみをお勧めします。ここで私が言いたいのは一般的なことであり、具体的には、マシンが数台しかなく、それほど多くない場合には、必要な権限のみを付与することをお勧めします。詳細については、上の表の提案を参照してください。
9 不要なデータベースを削除します
テストデータベースには、新しく作成されたアカウントに対するデフォルトの権限があります
6. mysql 侵入と権限昇格の分析と防止策
一般的に、mysql 権限を昇格するにはいくつかの方法があります:
1 udf 権限の昇格
この方法の鍵は、dll ファイルをインポートすることです。個人的には、ディレクトリに対するプロセス アカウントの書き込み権限が適切に制御されている限り、dll ファイルのインポートを防ぐことができると思います。プロセス アカウントの権限が十分に低い限り、アカウントの追加などのリスクの高い操作は実行できません。
2 スタートアップ ファイルを書き込みます
この方法は上記と同じですが、ディレクトリに対するプロセス アカウントの書き込み権限を適切に制御する必要があります。
3 rootアカウントが漏洩した場合
rootアカウントが適切に管理されておらず、rootアカウントが侵入された場合、データベースの情報は絶対に保証されません。ただし、プロセス アカウントのアクセス許可とディスク上のそのアクセス許可が制御されている場合でも、サーバーはセキュリティが侵害されないことを保証できます。
4 通常のアカウントの漏洩 (前述のように、特定のライブラリに対するすべての権限のみを持つアカウント)
ここで言う通常のアカウントとは、Web サイトで使用されるアカウントを指します。私が提案するより便利な方法は、それを直接与えることです。特定のライブラリのすべての権限。アカウント漏洩には、Web サーバーが侵害された後のデータベース アカウント パスワードへの挿入と直接アクセスが含まれます。
現時点では、対応するデータベースのデータは保護されていませんが、他のデータベースを脅かすことはありません。さらに、ここでの通常のアカウントにはファイル権限がないため、ファイルをディスクにエクスポートすることはできません。もちろん、この時点でもプロセス アカウントの権限は厳密に制御されます。
通常のアカウントにどのような権限が与えられているかは、上の表で確認できます。すべての権限をライブラリに直接与えることは実際には不可能です。
7. セキュリティ設定に必要な一般的なコマンド
1. 新しいユーザーを作成し、対応するデータベースに権限を付与します
grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';
grant all privileges on database.* to user@localhost identified by 'passwd';
2. 権限を更新します
flush privileges;
3. 権限を表示します
show grants;
4. 権限の削除
revoke delete on *.* from 'jack'@'localhost';
5. ユーザーの削除
drop user 'jack'@'localhost';
6. ユーザー名の変更
rename user 'jack'@'%' to 'jim'@'%';
7. ユーザーのパスワードの変更
8.データベースの削除
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
9. データベースからファイルをエクスポート
drop database test;
関連する推奨事項:
以上がMySQLの権限の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。