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

推薦する

Vue2とVue3のライフサイクルの比較の詳細な理解

目次サイクル比較使用法要約するサイクル比較ヴュー2ヴュー3作成前設定作成された設定マウント前マウント...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分

シングルページアプリケーションの特徴「前提:」Web ページには、クリックするとサイト内の他のページ...

Markodwnによるタイトル配置による同期スクロールのアイデアの詳細な説明

序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...

MYSQL大規模書き込み問題の最適化の詳細な説明

概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...

CSSとHTMLを組み合わせる4つの方法

(1)各HTMLタグには属性スタイルがあり、CSSとHTMLを組み合わせている。 <div s...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

HTML で自動ページジャンプを実現する 5 つの方法

前回の記事では、HTML ページが 3 秒後に自動的にジャンプする一般的な 3 つの方法を紹介しまし...

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...

CentOS 8 仮想マシンから Windows 10 ホスト フォルダーにアクセスする方法の簡単な分析

VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...

MySQL 8.0.12 簡単インストールチュートリアル

この記事では、MySQL 8.0.12のインストールチュートリアルを参考までに紹介します。具体的な内...

操作例 MySQL ショートリンク

MySQL ショートリンクの設定方法1. mysql 接続番号ステートメントコマンドを確認します。 ...

Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

1) プロセス 2) FSImageと編集NodeNode は HDFS の頭脳です。ファイルシステ...

Mysql論理アーキテクチャの詳細な説明

1. 全体的なアーキテクチャ図他のデータベースと比較すると、MySQL は、そのアーキテクチャがさま...