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

推薦する

組み込み Linux で QT アプリケーションを再起動する簡単な方法 (QT4.8 qws ベース)

アプリケーション ソフトウェアには通常、次のようなビジネス要件があります。新しいバージョンの APP...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

NodeJSとブラウザにおけるこのキーワードの違い

序文JavaScript を学習した人なら誰でも、さまざまな環境で this がどこを指すかという問...

Dockerはポートを介してコンテナに接続します

Dockerコンテナ接続1. ネットワークポートマッピングPythonアプリケーション用のコンテナを...

docker を使用して influxdb と mongo をデプロイするための一般的なコマンド

Docker ベースのデータベースをデプロイするsudo docker pull influxdb ...

Reactは感情を使ってCSSコードを書く

目次導入:感情のインストール:一般的な CSS コンポーネントを追加します。既存のコンポーネントにス...

MySQL実行計画の詳細な説明

EXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情報を提供します...

CentOS 8 に Postfix メール サーバーをインストールして設定する方法

Postfix は、Linux システム上で電子メールをルーティングまたは配信するために使用される無...

VueにおけるAxios非同期通信の詳細な説明

1. まず、インタラクティブに使用するための .json ファイルを作成します。json データ形式...

クロスオリジン画像リソース権限(CORS 対応画像)

HTML 仕様書では、画像の crossorigin 属性が導入されています。適切なヘッダー情報 ...

MySQL マスタースレーブレプリケーションの実装手順

目次mysql マスタースレーブレプリケーションMySQL マスタースレーブレプリケーション方式My...

JS における ES6 継承と ES5 継承の違い

目次継承ES5 プロトタイプ継承ES6 クラス継承両者の違いES5プロトタイプ継承の内部実装ES6 ...

DockerコンテナがJupyterにアクセスできない問題の解決策

このプロジェクトでは、環境を構築するために Docker コンテナを使用します。Dockerfile...

MySQL監視グループレプリケーションについて簡単に説明します

元のテキスト: https://dev.mysql.com/doc/refman/8.0/en/gr...

win10環境でDockerをインストールする実装

1. Docker公式サイトにアクセスするまず、Dockerの公式ウェブサイトにアクセスして、最新の...