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 記述

推薦する

Linux での SSH パスワードフリーログイン設定の詳細な説明

Linux サーバー A と B が 2 台あり、一方のサーバーから SSH 経由でパスワードなしで...

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

vuexサードパーティパッケージを使用してデータの永続性を実装する方法

目的: vuex で管理されている状態データを同時にローカルに保存できるようにします。独自のストレー...

MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法

序文データベースをバックアップするときは、データベース全体のバックアップを使用します。ただし、何らか...

Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集

/****************** * カーネルデバッグ技術 ****************...

JS 関数とコンストラクタを簡単に理解する

目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...

コーディングスキルを向上させるためのJavaScriptのヒント

目次1. 一意の値をフィルタリングする2. 短絡評価2.1 シナリオ例3. ブール変換4. 文字列を...

HTML要素のID属性とName属性の違い

今日、私は <a href="#13"></a> につい...

WeChatミニプログラム開発のためのコンポーネント設計仕様

WeChat ミニプログラム コンポーネント設計仕様コンポーネントベースの開発という考え方は、私の開...

DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する

Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...

react-beautiful-dnd を使用してリスト間のドラッグ アンド ドロップを実装する

目次react-beautiful-dndを選ぶ理由基本的な使い方基本概念使い方使用中に発生した問題...

WindowsでMysql5.7.17のインストールと起動に失敗する問題を解決する

マシンに初めて MySQL をインストールします。オペレーティングシステムはwin7ですmysqlの...

Iframe の使用を減らすべきいくつかの理由の分析

次のグラフは、100 個の異なる要素で iframe を作成するのにどれくらいの時間がかかるかを示し...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

MySQLユーザー権限管理の詳細な説明

目次序文: 1. ユーザー権利の概要2. 実際の権限管理序文:データベースのユーザー権限管理について...