MySQL セキュリティ管理の詳細

MySQL セキュリティ管理の詳細

1. 順番に紹介する

MySQLサーバーのセキュリティは、ユーザーが必要とするデータに対して、過不足なく適切な量のアクセス権を持つべきであるという原則に基づいています

言い換えれば、ユーザーは大量のデータに過度にアクセスすることはできません。

  • ほとんどのユーザーはテーブルの読み取りと書き込みのみが必要ですが、一部のユーザーはテーブルの作成と削除も行う必要があります。
  • 一部のユーザーはテーブルを読み取る必要はあっても、テーブルを更新する必要がない場合があります。
  • ユーザーにデータの追加を許可し、データの削除は許可しないという場合があります。
  • 一部のユーザー (管理者) はユーザー アカウントの権限を処理する必要がある場合がありますが、ほとんどのユーザーは必要ありません。
  • ユーザーがストアド プロシージャを通じてデータにアクセスできるようにしたいが、データに直接アクセスすることは許可したくない場合があります。
  • ユーザーがログインしている場所に基づいて、特定の機能へのアクセスを制限することもできます。

これらは単なる例ですが、ユーザーに必要なアクセス権のみを与える必要があるという重要な事実を説明するのに役立ちます。

これはアクセス制御と呼ばれ、アクセス制御を管理するにはユーザー アカウントの作成と管理が必要です。

意図しないエラーの防止 アクセス制御の目的は、ユーザーによる悪意のある行為を防ぐことだけではないことに注意することが重要です。

データの悪夢は、多くの場合、MySQL ステートメントの誤入力、不適切なデータベースの操作、その他のユーザー エラーなど、意図しないミスの結果です。

アクセス制御は、ユーザーが実行すべきでないステートメントを実行できないようにすることで、このような状況を防ぐのに役立ちます。 root を使用しないでください。 root ログインの使用は真剣に受け止めるべきです。絶対に必要な場合(別の管理者アカウントにログインできない場合など)のみ使用してください。

日常的なMySQL操作ではrootを使用しないでください。
MySQL ユーザー アカウントと情報は、 mysqlという名前の MySQL データベースに保存されます。通常、 mysqlデータベースやテーブルに直接アクセスする必要はありません (これについては後で説明します) が、場合によっては直接アクセスする必要があります。直接アクセスする必要がある場合の 1 つは、すべてのユーザー アカウントのリストを取得する必要がある場合です。

これを行うには、次のコードを使用します。

mysql を使用します。
ユーザーからユーザーを選択します。

mysqlデータベースには、すべてのユーザー アカウントが含まれるuserというテーブルがあります。

ユーザー テーブルには、ユーザーのログイン名を格納するuserという列があります。新しくインストールされたサーバーには 1 人のユーザーしかいない場合があります (ここに示すように)。一方、過去に構築されたサーバーには多くのユーザーが存在する場合があります。

複数のクライアントでの実験 ユーザー アカウントと権限の変更を実験する最良の方法は、複数のデータベース クライアント ( mysqlコマンドライン ユーティリティの複数のコピーなど) を開き、1 つを管理ユーザーとしてログインし、他のクライアントをテスト対象のユーザーとしてログインすることです。

2. ユーザーを作成する

'ben123456' によって識別されるユーザー ben を作成します。


これによりユーザーが作成されます。

ハッシュ化されたパスワードを指定すると、 IDENTIFIED BYパスワードをプレーンテキストとして指定します。MySQL
ユーザー テーブルに保存される前に暗号化されます。パスワードをハッシュ値として指定するには、 IDENTIFIED BY PASSWORDを使用します。
GRANTまたはINSERT GRANTステートメント (後述) を使用してユーザー アカウントを作成することもできますが、一般的にCREATE USER最も明確でシンプルなステートメントです。さらに、ユーザー テーブルに行を直接挿入してユーザーを追加することもできますが、セキュリティ上の理由から、通常はこの方法は推奨されません。

MySQL がユーザー アカウント情報を保存するために使用するテーブル (およびテーブル スキーマなど) は非常に重要であり、これらが損傷すると MySQL サーバーに重大な損害を与える可能性があります。したがって、これらのテーブルを直接処理するのではなく、タグと関数を使用して処理する方が適切です。

ユーザー アカウントの名前を変更するには、次のように RENAME USER ステートメントを使用します。

ユーザー名 ben を zhangsan に変更します。


MySQL 5 以降のバージョンでは、RENAME USER のみがサポートされます。以前は、MySQL でユーザー名を変更するには、UPDATE を使用してユーザー テーブルを直接更新することができました。

3. ユーザーアカウントを削除する

ユーザー zhangsan を削除します。


知らせ:

MySQL 5 より前 MySQL 5 以降では、DROP USER はユーザー アカウントとそれに関連付けられているすべてのアカウント権限を削除します。 MySQL 5 より前では、DROP USER はユーザー アカウントを削除するためにのみ使用でき、関連付けられている権限を削除するために使用できませんでした。したがって、古いバージョンの MySQL を使用する場合は、まず REVOKE を使用してアカウントに関連付けられた権限を削除し、次に DROP USER を使用してアカウントを削除する必要があります。

4. アクセス権

ユーザー アカウントを作成したら、アクセス権を割り当てる必要があります。新しく作成されたユーザー アカウントにはアクセス権限がありません。 MySQL にログインすることはできますが、データを表示したり、データベース操作を実行したりすることはできません。

'zhang123456' によって識別されるユーザー zhangsan を作成します。


ユーザー アカウントに付与された権限を確認するには、次のようにSHOW GRANTS FORを使用します

「zhangsan」の助成金を表示


結果:

パスワード '*557661E2A88A816A3155408E5D15997A8C5C7D25' で識別される 'zhangsan'@'%' に *.* の使用権限を付与します


権限が表示されません。

USAGE は権限がまったくないことを意味します (あまり直感的ではないことは承知しています)。したがって、この結果は、どのデータベースやテーブルに対しても権限がないことを意味します。

ユーザーは user@host として定義されます。MySQL の権限は、ユーザー名とホスト名の組み合わせを使用して定義されます。ホスト名を指定しない場合は、デフォルトのホスト名が使用されます(ホスト名に関係なくユーザーにアクセスを許可します)

権限を設定するには、GRANT ステートメントを使用します。 GRANT では、少なくとも以下の情報を提供する必要があります。

  • 付与される権限。
  • アクセス権限が付与されるデータベースまたはテーブル。
  • ユーザー名。

次の例は、GRANT の使用方法を示しています。

zhangsan に test.* の SELECT 権限を付与します。


それから:

ZHANGSAN への助成金を表示
'zhangsan'@'%' に `test`.* の SELECT 権限を付与します。


各 GRANT は、ユーザーの権限を追加 (または更新) します。 MySQL はすべての許可を読み取り、それに基づいて権限を決定します。

GRANTの逆の操作は REVOKE であり、特定の権限を取り消すために使用されます。次に例を示します。

test.* の SELECT を取り消します (zhangsan から)。


この REVOKE ステートメントは、ユーザー bforta に付与された SELECT アクセス権限を取り消します。取り消されるアクセス権が存在している必要があります。存在しない場合はエラーが発生します。

GRANT と REVOKE は、複数のレベルでアクセス権限を制御します。

  • サーバー全体に対しては、GRANT ALL と REVOKE ALL を使用します。
  • データベース全体には、ON database.* を使用します。
  • 特定のテーブルの場合は、ON database.table; を使用します。
  • 特定の列。
  • 特定のストアド プロシージャ。

例:

ALL GRANT OPTION ALTERを除くすべての権限 ALTER TABLEを使用する
ALTER ROUTINE ALTER PROCEDURE と DROP PROCEDURE の使用
CREATE CREATE TABLEの使用
CREATE ROUTINE CREATE PROCEDURE の使用
一時作成 
テーブル
CREATE TEMPORARY TABLEの使用
CREATE USER CREATE USER、DROP USER、RENAME USER、および REVOKE の使用
すべての特権
ビューを作成
DELETE DELETEの使用
DROP DROP TABLEの使用
EXECUTE CALLとストアドプロシージャFILEの使用 SELECT INTO OUTFILEとLOAD DATA INFILEの使用
GRANT OPTION GRANTとREVOKEの使用
INDEX CREATE INDEX と DROP INDEX の使用
INSERT INSERTの使用
ロックテーブル
PROCESS SHOW FULL PROCESSLIST の使用
FLUSHを使用したRELOAD
レプリケーションクライアントサーバロケーションアクセスレプリケーションスレーブによるSELECTを使用したSELECTを使用した
SHOW DATABASESの使用
SHOW VIEW SHOW CREATE VIEWの使用
SHUTDOWN mysqladmin shut down を使用します (MySQL をシャットダウンします)
SUPERはCHANGE MASTER、KILL、LOGS、PURGE、MASTERを使用します
そして SET GLOBAL。また、mysqladminデバッグログインUPDATEを許可するUPDATEを使用する
使用方法 アクセス権なし

GRANTREVOKE使用すると、貴重なデータに対してユーザーが実行できる操作と実行できない操作を完全に制御できます。

GRANT および REVOKE を使用した将来の承認では、ユーザー アカウントが存在している必要がありますが、関連するオブジェクトにはそのような要件はありません。

これにより、管理者はデータベースやテーブルを作成する前にセキュリティ対策を設計して実装できます。

この副作用として、データベースまたはテーブルが削除されても (DROP ステートメントを使用して)、関連付けられているアクセス権限は引き続き存在します。さらに、将来データベースまたはテーブルを再作成した場合でも、これらの権限は引き続き機能します。

次のように、各権限をリストし、カンマで区切って複数の GRANT ステートメントを連結することにより、複数の付与を簡素化できます。

zhangsan に SELECT、INSERT ON test.* 権限を付与します。

5. パスワードを変更する

ユーザーのパスワードを変更するには、SET PASSWORD ステートメントを使用します。新しいパスワードは次のように暗号化する必要があります。

zhangsan のパスワードを設定する = PASSWORD('zhangsan');

現在のユーザーのパスワードを変更します:

パスワードの設定 = PASSWORD('root');

MySQL セキュリティ管理の詳細に関するこの記事はこれで終わりです。MySQL セキュリティ管理に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 年末ですが、MySQL パスワードは安全ですか?
  • MySQLを安全にシャットダウンする方法
  • MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)
  • MySQLプロセスを安全かつ適切にシャットダウンする方法
  • MySQLデータのセキュリティを確保するための提案
  • MySQLインスタンスを安全にシャットダウンする方法

<<:  スタイル属性 (element.style) で定義されたインライン スタイルを削除する方法

>>:  水平プログレスバーの最後にテキストを表示するための実装コードの CSS 記述

推薦する

HTML の基礎_一般的なタグ、共通タグ、表

パート 1 HTML <html> -- 開始タグ<ヘッド>ウェブページ上の...

Tomcat で JNDI データ ソースを構成する 3 つの方法

これまでの仕事では、開発サーバーは一般的にTomcatでした。データソースは、多くの場合、appli...

SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

構文フォーマット: row_number() over(partition by grouping ...

MySQLデータベースが大きすぎる場合にバックアップと復元を行う方法

コマンド: mysqlhotcopyこのコマンドは、ファイルをコピーする前にテーブルをロックし、不完...

よく使われる HTML タグとその特徴の完全なリスト

まず、HTML タグのいくつかの特性を知っておく必要があります。 1. 「<keyword&g...

mysql バックアップ戦略の実装 (フルバックアップ + 増分バックアップ)

目次設計シナリオ技術的なポイントサーバー情報準備フルバックアップスクリプト(Mysql-FullyB...

MySQLトランザクションを実行するための構文とプロセスの詳細な説明

概要: MySQL は、トランザクションをサポートするためにさまざまなストレージ エンジンを提供しま...

MySQLデータベースに他のIPアドレスからアクセスできない問題の解決策

序文先ほどのプロジェクトを参考にすると、環境は整いました。プロジェクトの準備と検証の段階で、問題が発...

21 の MySQL 標準化および最適化のベスト プラクティス!

序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...

Tomcat サーバーの設定と Web プロジェクトの公開に関する IDEA グラフィック チュートリアル

1. Webプロジェクトを作成したら、Tomcatを例にサーバーを構成する必要があります。 2. 実...

Dockerボリュームのファイルマッピング方法

背景ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ...

HTML の marquee 属性の詳細な説明

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...

div 内の img と span の垂直方向の中央揃えの問題について

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<htm...

ベースリンクタグの使用の紹介ベース

<br />リンクをクリックすると、ポップアップ表示される Web ページ アドレスは ...

Windows 10 + mysql 8.0.11 zipインストールチュートリアルの詳細

準備する: MySQL 8.0 Windows zip パッケージのダウンロード アドレス: htt...