MySQLのユーザー権限の確認と管理方法の詳細な説明

MySQLのユーザー権限の確認と管理方法の詳細な説明

この記事では、例を使用して、MySQL ユーザー権限を確認および管理する方法を説明します。ご参考までに、詳細は以下の通りです。

1.MySQLの権限は2段階で検証されます

1. サーバーは、接続が許可されているかどうかを確認します: ユーザー名、パスワード、ホスト アドレス。

2. 各リクエストに実装権限があるかどうかを確認します。

2.MySQL権限リスト

権限権限レベル権限
作成するデータベース、テーブル、またはインデックスデータベース、テーブル、またはインデックス権限の作成
落とすデータベースまたはテーブルデータベースまたはテーブルの権限を削除する
付与オプションデータベース、テーブル、またはストアド プロシージャ権限付与オプション
参照データベースまたはテーブル外部キー権限
変える表面フィールドの追加、インデックス作成、フィールドの変更など、テーブルを変更します。
消去表面データ削除権限
索引表面インデックス権限
入れる表面権限を挿入
選択表面クエリ権限
アップデート表面権限の更新
ビューを作成ビュー表示権限の作成
ビューを表示ビュー表示 表示権限
ルーチンを変更するストアドプロシージャストアドプロシージャの権限の変更
ルーチンを作成するストアドプロシージャストアドプロシージャ権限の作成
実行するストアドプロシージャストアドプロシージャの実行権限
ファイルサーバーホスト上のファイルアクセスファイルアクセス権限
一時テーブルを作成するサーバー管理一時テーブル権限の作成
テーブルをロックするサーバー管理テーブルの権限をロックする
ユーザーを作成サーバー管理ユーザー権限の作成
手順サーバー管理プロセス権限の表示
リロードサーバー管理flush-hosts、flush-logs、flush-privileges、flush-status、flush-tables、flush-threads、refresh、reload などのコマンドを実行する権限
レプリケーションクライアントサーバー管理コピー権限
レプリケーションスレーブサーバー管理コピー権限
データベースを表示サーバー管理データベース権限の表示
シャットダウンサーバー管理データベース権限を無効にする
素晴らしいサーバー管理スレッドの強制終了権限の実行

3.MySQLユーザー権限管理操作

1. 権限クエリ:

(1)すべてのmysqlユーザーとその権限を表示します。

mysql.user\G から * を選択します。

(フォーマット表示)

(2)現在のMySQLユーザー権限を表示します。

助成金を表示する。

(3)ユーザーの権限を表示する:

username@host の許可を表示します。

例:

root@localhost の権限を表示します。

2. MySQLユーザーを作成します。

方法 1: create user コマンドを使用してアカウントを作成します。

'password' で識別されるユーザー 'username'@'host' を作成します。

例:

'wujuntian' によって識別されるユーザー 'wjt'@'localhost' を作成します。

方法 2: ユーザー レコードを mysql.user テーブルに直接挿入します。

例:

次のようにコードをコピーします
mysql.user に挿入し、user='wujuntian'、host='localhost'、password=password('123123') を設定します。

知らせ:

方法 2 を使用する場合は、必ずフラッシュ権限を実行して権限を更新してください。次に、MySQL 5.7 以降では、mysql.user テーブルのパスワード フィールドが authentication_string に置き換えられたため、「password」を「authentication_string」に変更し、パスワードを password 関数を使用して暗号化する必要があります。

3. MySQLユーザーの削除:

ユーザー 'username'@'host' を削除します。

4.Mysqlユーザーに権限を付与します。

新しく作成されたユーザーにはデフォルトでは権限がないため、 grant コマンドを使用して権限を付与する必要があります。

助成金指示書の完全な形式は次のとおりです。

'password' で識別される 'user name'@'host' に、データベース名。テーブル名に対する権限リストを GRANT オプション付きで付与します。

例:

付与オプションを使用して、"wujuntian" で識別される 'wjt'@'localhost' に *.* のすべての権限を付与します。

「*」を使用してすべてのデータベースまたはすべてのテーブルを表すことができ、「%」を使用して任意のホスト アドレスを表すことができます。

grant を使用すると、ユーザーに権限を繰り返し追加して権限をスタックすることができます。

付与オプション付き: このオプションは、ユーザーが自分の権限を他のユーザーに付与できることを意味します。

承認後に権限を更新することを忘れないでください:

権限をフラッシュします。

5.Mysql ユーザー権限を取り戻す:

取り消し命令の形式は次のとおりです。

ユーザー名@ホストからデータベース名.データテーブル名の権限リストを取り消します。

例:

wjt@localhost からの test.user の選択を取り消します。

知らせ:

実際、GRANT ステートメントを実行すると、権限テーブルにターゲット アカウントが存在しない場合はアカウントが作成され、すでに存在する場合は権限が追加されます。

使用権限は取り消すことができません。つまり、REVOKE ユーザー権限ではユーザーを削除できません。

6. アカウント名を変更します。

ユーザー名「古いユーザー名」@「古いホスト」を「新しいユーザー名」@「新しいホスト」に変更します。

例:

ユーザーの名前 'wujuntian'@'localhost' を 'ajun'@'localhost' に変更します。

7. MySQLユーザーのパスワードを変更します。

方法 1: set password コマンドを使用します。

'username'@'host' のパスワードを設定します = password('新しいパスワード');

例:

'root'@'localhost' のパスワードを設定します = password('123456');

方法 2: mysql.user テーブルの password (または authentication_string) フィールドを変更します。

例:

次のようにコードをコピーします
mysql.user を更新し、password=password('123123') を設定します。ここで、user='root'、host='localhost' です。

知らせ:

この方法では、権限を更新するために「flush privileges;」コマンドを実行する必要があります。そうしないと、パスワードの変更は有効になりません。 MySQL 5.7 以降では、「password」を「authentication_string」に変更する必要があります。

方法 3: grant コマンドを使用して、認証中にパスワードを変更します。

'新しいパスワード' で識別されるユーザー名@ホストに、データベース名.テーブル名に対する選択権限を付与します (付与オプション付き)。

例:

次のようにコードをコピーします
'111111' で識別される ajun@localhost に、 grant オプションを使用して test.user に対する select 権限を付与します。

方法 4: mysqladmin スクリプト ファイルを実行します。

このファイルは通常、MySQL インストール ディレクトリの下の bin ディレクトリにあります。ディレクトリに入り、次の 2 つの特定の状況に応じてコマンドを入力します (この権限を持つのは root ユーザーのみです)。

(1)ユーザーにパスワードがない場合

mysqladmin -u ユーザー名 パスワード 新しいパスワード;

(2)ユーザーは既にパスワードを持っています:

mysqladmin -u ユーザー名 -p パスワード 新しいパスワード;

(Enter キーを押すと、古いパスワードの入力を求められます。入力すると変更が成功します。)

知らせ:

パスワードを変更する場合は、PASSWORD 関数を使用する必要があります (mysqladmin および GRANT の場合は自動的に追加されるため、記述する必要はありません)。

8. MySQLにログインするためのパスワードを忘れました:

方法1:

まず、実行中の Mysql サービスを停止し、コマンド ライン ウィンドウの mysql インストール ディレクトリの下の bin ディレクトリに移動し、-skip-grant-tables パラメータで mysqld ファイルを実行します (Linux システムでは mysqld_safe ファイルを実行する方が安全です)。

mysqld --skip-grant-tables

これにより、Mysql のアクセス制御をスキップし、コンソールで管理者として MySQL データベースにアクセスできるようになります。さらに、別のコマンドラインウィンドウを開き、MySQL インストールディレクトリの下の bin ディレクトリに入り、直接「mysql」と入力して Enter キーを押すと、MySQL にログインでき、その後パスワードをリセットできます (注: この時点では、「Mysql ユーザーパスワードの変更」の 4 つの方法のうち 2 番目の方法のみを使用できます)。設定が成功したら、Mysql サービスを終了して再起動します。

方法 2: MySQL 構成ファイル my.ini を変更します。

実際、原理は方法 1 と同じで、どちらも MySQL が提供する --skip-grant-tables パラメータを使用して MySQL アクセス制御をスキップします。 MySQL 構成ファイル my.ini を開き、[mysqld] の下に「skip-grant-tables」を追加して保存し、MySQL サービスを再起動すると、パスワードなしで MySQL にログインしてパスワードを変更できます。

Mysql の「mysql」データベースには、すべての Mysql ユーザーの権限情報データ テーブルが保存されます。 MySQL を起動すると、すべての権限テーブルの内容がメモリに読み込まれ、メモリ内の内容が権限の判定に直接使用されます。 grant、revoke、または set password を使用して権限テーブルに加えられた変更は、サーバーによってすぐに認識されます。 GRANT 操作の本質は、権限テーブルを変更した後に権限を更新することです。ただし、挿入、更新、削除などを使用して権限テーブルを手動で変更する場合は、権限のフラッシュ コマンドを実行する必要があります。これにより、サーバーは権限テーブルの内容をメモリに再読み込みし、変更が有効になります。このコマンドを実行しない場合は、コマンドを有効にするために MySQL サービスを再起動する必要があります。したがって、権限テーブルを操作するには、grant、revoke、またはset passwordを使用するのが最適です。これにより、flush privilegesコマンドを実行する手間が省けます。このコマンドの実行を忘れると、非常に困ったことになります。 。 。

それだけでなく、ユーザーを削除したり名前を変更したりするには、delete コマンドや update コマンドではなく、それぞれ drop user コマンドや rename user コマンドを使用するのが最適です。前者は、mysql.user データ テーブルを操作するだけでなく、他の権限テーブルのレコードも更新しますが、後者は、mysql.user テーブルのデータのみを操作します。ユーザーの権限情報は mysql.user テーブルにのみ存在するわけではないため、多くの問題が発生します。たとえば、delete を使用して mysql.user テーブル内のユーザーを削除したが、他の権限データ テーブルを操作しなかった場合、tables_priv などの他の権限データ テーブル内のユーザーに関する権限レコードはそのまま残ります。次回、create user コマンドを使用して同じ名前のユーザーを作成すると、失敗します。insert into コマンドを使用して mysql.user テーブルにレコードを挿入するか、他の権限データ テーブル内のユーザー名に関連するレコードを先に削除することしかできません。更新コマンドを使用してユーザー名を変更すると、大きな問題が発生することもあります。名前を変更すると、ユーザーは多くの権限を失い、他の権限テーブルにある元のユーザー名のレコードは、各権限テーブルで同じ更新操作を実行しない限り、役に立たないレコードになります。これは非常に面倒です。したがって、drop user と rename user を使用してください。 1 つのコマンドで、システムが自動的にすべてを完了できます。 ぜひ試してみてください。

Mysql 権限チェック:

MySQL は、まず、より大きなスコープに対する権限があるかどうかを確認し、ない場合は、より小さなスコープに対する権限があるかどうかを確認します。たとえば、まずこのデータベースに選択権限があるかどうかを確認します。ある場合は、実行を許可します。そうでない場合は、テーブルに対する選択権限が、最も細かい粒度まで存在するかどうかを確認します。権限がない場合、実行は拒否されます。したがって、制御の粒度が細かくなるほど、権限の検証の手順が増え、パフォーマンスが低下します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • DCL を使用して MySQL でユーザーを管理し、権限を制御する方法
  • MySQLでユーザーを作成し、権限を管理する方法
  • MySQL ユーザー権限管理の分析例
  • MySQLユーザーと権限管理の詳細な説明
  • MySQLのユーザーアカウント管理と権限管理の詳細な説明
  • MySQLユーザー権限管理の詳細な説明
  • MySQL における基本的なユーザーおよび権限管理方法の概要
  • MySQLユーザー権限管理の詳細な説明

<<:  Linux に Python クローラー スクリプトを展開し、スケジュールされたタスクを設定する方法

>>:  Node.js での組み込みモジュールとカスタムモジュールの実装

推薦する

Nginx で limit_req_zone を使用して同じ IP へのアクセスを制限する方法

Nginx は、ngx_http_limit_req_module モジュールの limit_req...

Nginx リクエスト制限の設定方法

Nginx は、多くの優れた機能を備えた強力で高性能な Web およびリバース プロキシ サーバーで...

VUEは登録とログインの効果を実現します

この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...

ES9の新機能の詳細な説明: 非同期反復

目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...

HTML 基本ノート (推奨)

1. ウェブページの基本構造: XML/HTML コードコンテンツをクリップボードにコピー<...

Doubanウェブサイトのウェブサイトコンテンツに小さな変更を加える方法

<br />読みやすさはウェブサイトにとって非常に重要な部分であり、ウェブサイトの核心と...

フォームにファイルをアップロードした後にアクションを保存するよう促す理由と解決策

jsonデータはhtml形式で返される必要がありますつまり、 response.setContent...

フレックスとポジションの互換性の詳細な説明マイニングノート

今日は、すべてのブラウザ (主に IE 9 以上と Chrome) と互換性のある自分のホームページ...

MySQLのカバーインデックスに関する知識ポイントのまとめ

インデックスにクエリする必要があるすべてのフィールドの値が含まれている(またはカバーしている)場合、...

Dockerコンテナ接続実装手順の分析

一般的に言えば、コンテナが起動した後、ポート マッピングを通じてコン​​テナが提供するサービスを使用...

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...

Docker を使用して Spring Boot をデプロイする方法

Docker テクノロジの開発により、マイクロサービスの実装にさらに便利な環境が提供されます。Doc...

MySql におけるプロセス制御関数/統計関数/グループ化クエリの使用法の分析

これからの道のりは長く困難ですが、私は探求を続けます。また週末がやってきました。引き続き、皆さんと一...

Python MySQL データベース テーブルの変更とクエリ

Python は MySQL に接続してデータベース テーブルを変更およびクエリします。 pytho...

MySQL SELECT文の実行方法

MySQL Select ステートメントはどのように実行されますか?最近、Geek Time で D...