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 での組み込みモジュールとカスタムモジュールの実装

推薦する

Apache Tika を使用してファイルが破損しているかどうかを検出する方法

Apache Tika は、さまざまな形式のファイルからファイル タイプを検出し、コンテンツを抽出す...

Windows Server 2008 R2 サーバーが理由もなく自動的に再起動する問題の解決策

Windows Server 2008 サーバーが自動的に再起動します。サーバーにログインした後、ど...

初心者向けのHTMLタグネストルールの詳細なまとめ

最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...

MySQLでSELECT文が実行される仕組み

目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...

チェックボックスの選択またはキャンセルを実装するJavaScript

この記事では、すべてのチェックボックスを選択または解除するためのJavaScriptの具体的なコード...

Reactの3つの主要属性におけるpropsの使用の詳細な説明

目次クラスコンポーネント機能コンポーネントプロパティは読み取り専用ですコンポーネント間通信前回は状態...

MySQL UNION演算子の基本知識ポイント

MySQL UNION 演算子このチュートリアルでは、MySQL UNION 演算子の構文と例を紹介...

WeChatアプレットがジグソーパズルゲームを実装

この記事では、WeChatアプレットでジグソーパズルゲームを実装するための具体的なコードを参考までに...

CSS でハートを描く 3 つの方法

以下では、CSS を使用してハートの形を描く 3 つの方法を紹介します。実装プロセスは非常にシンプル...

Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明

Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明 Iframe ウェブペー...

Linux dirnameコマンドの具体的な使い方

01. コマンドの概要dirname - ファイル名からディレクトリ以外のサフィックスを削除しますd...

Linux 上での MySQL データベースのインストールと Java プロジェクトの構成に関する詳細なグラフィック説明

1. MySQLデータベースをインストールする① ダウンロードして解凍し、/opt/softディレク...

TomcatはXMLを解析し、リフレクションを通じてオブジェクトを作成します。

次のサンプル コードでは、Tomcat が XML を解析し、リフレクションを通じてオブジェクトを作...

Vue.jsは背景テーブルコンポーネントのカプセル化を管理します

目次問題分析なぜカプセル化なのかパッケージの内容は何ですか?テーブルコンポーネントをカプセル化するデ...

Ubuntu 16.4 で完全に分散された Hadoop 環境を構築するための実践的なチュートリアル

序文この記事は主にubantu 16.4 Hadoop完全分散構築に関する関連コンテンツを紹介し、皆...