2 つの MySQL ユーザー削除ステートメント (delete user と drop user) の違い

2 つの MySQL ユーザー削除ステートメント (delete user と drop user) の違い

ヒント:

MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通常、create user または grant ステートメントを使用して作成します。create 構文で作成されたユーザーには権限がないため、grant 構文を使用して権限を割り当てる必要があります。grant 構文で作成されたユーザーには、割り当てられた権限が直接与えられます。いくつかのテスト ユーザーを作成してテストした後、ユーザーのライフ サイクルが終了し、ユーザーを削除する必要がある場合があります。MySQL でユーザーを削除するには、通常 2 つの方法があります。1 つはdrop userで、もう 1 つはdelete from mysql.userです。では、これら 2 つの方法の違いは何でしょうか。ここでは例を通してこれを説明します。

mysql.userから削除

まず、 delete from mysql.userを見てみましょう。テスト用に 2 人のユーザーを作成します。テスト環境は MySQL バージョン 5.5 です。ユーザー名は yeyz@'%' と yeyz@'localhost' です。ユーザーを作成する構文は次のとおりです。

mysql 15:13:12>>'123456' で識別される '%' というユーザー yeyz を作成します。
クエリは正常、行は影響を受けました (. 秒)
mysql 15:20:01>>yeyz.yeyz に対する select、create、update、delete 権限を yeyz@'%' に付与します。
クエリは正常、行は影響を受けました (. 秒)
mysql 15:29:48>>'123456' によって識別される 'yeyz'@localhost に yeyz.yeyz の使用権限を許可します。
クエリは正常、行は影響を受けました (. 秒)
[email protected]:(なし) 15:20:39>>yeyz@'%' の権限を表示します。
+--------------------------------------------------------------------------------------------------------------------+
| yeyz@% への助成金 |
+--------------------------------------------------------------------------------------------------------------------+
| パスワード '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' で識別される 'yeyz'@'%' に *.* の使用を許可します |
| `yeyz`.`yeyz` に対する SELECT、UPDATE、DELETE、CREATE 権限を 'yeyz'@'%' に付与します |
+--------------------------------------------------------------------------------------------------------------------+

この時点で、delete メソッドを使用して、mysql.user テーブル内の 2 人のユーザーを手動で削除します。user テーブルを確認すると、次のことがわかります。

mysql 15:20:43>>user='yeyz' の場合、mysql.user から削除します。
クエリは正常、行は影響を受けました (. 秒)

mysql 15:21:40>>mysql.userからユーザー、ホストを選択します。
+------------------+-----------------+
| ユーザー | ホスト |
+------------------+-----------------+
| dba_yeyz | ローカルホスト |
| ルート | ローカルホスト |
| tkadmin | ローカルホスト |
+------------------+-----------------+
 セット内の行数 (.sec)

yeyz ユーザーはもう存在しません。show grants for コマンドを使用して、削除したユーザーを表示すると、このユーザーの権限の説明がまだ存在していることがわかります。

mysql 15:24:21>>yeyz@'%' の権限を表示します。
+--------------------------------------------------------------------------------------------------------------------+
| yeyz@% への助成金 |
+--------------------------------------------------------------------------------------------------------------------+
| パスワード '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' で識別される 'yeyz'@'%' に *.* の使用を許可します |
| `yeyz`.`yeyz` に対する SELECT、UPDATE、DELETE、CREATE 権限を 'yeyz'@'%' に付与します |
+--------------------------------------------------------------------------------------------------------------------+
 セット内の行数 (0.00 秒)

これは、このユーザーを mysql.user テーブルから削除したにもかかわらず、このユーザーが db テーブルと権限テーブルにまだ存在していることを意味します。この結論を確認するために、yeyz@localhost という名前のユーザーを再作成します。次のように、このユーザーには使用権限のみを付与し、その他の権限は構成しません。

mysql ::>> '123456' によって識別される 'yeyz'@localhost に yeyz.yeyz の使用権限を許可します。
クエリは正常、行は影響を受けました (. 秒)

今回は、ユーザー yeyz@localhost を使用してデータベース サービスにログインし、次のように関連する更新操作を実行します。

[dba_mysql@tk-dba-mysql-stat-- ~]$ /usr/local/mysql/bin/mysql -uyeyz --socket=/data/mysql_4306/tmp/mysql.sock --port= -p -hlocalhost
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは 
サーバーバージョン: 5.5.-log MySQL Community Server (GPL)

Copyright (c) 、Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql--yeyz@localhost:(なし) 15:31:05>>yeyz.yeyzから*を選択します。
+------+
|id|
+------+
| 3 |
| 4 |
| 5 |
+------+
 セット内の行数 (.sec)

mysql--yeyz@localhost:(なし) 15:31:16>>id=; の yeyz.yeyz から削除します。
クエリは正常、行は影響を受けました (. 秒)

mysql--yeyz@localhost:(なし) 15:31:32>>yeyz.yeyzから*を選択します。
+------+
|id|
+------+
| 3 |
| 4 |
+------+
 セット内の行数 (.sec)

最終結果は予測可能です。使用権限を持つユーザーがデータベース テーブルに対して更新操作を実行し、成功しました。これらはすべて、delete from mysql.user 操作のおかげです。この操作はユーザー テーブルからレコードを削除しますが、このレコードのホストが % の場合、同じ名前の新しいユーザーが作成されると、新しいユーザーは以前のユーザー権限を継承し、ユーザー権限制御が無効になります。これは非常に危険な操作であり、可能な限り回避する必要があります。

もう一度開いて、ドロップメソッドを使用してユーザーを削除する方法を確認します。

まず、2 人のユーザーを削除し、show grants for ステートメントを使用してその権限を表示します。

mysql ::>>ユーザーyeyz@'%'を削除します。
クエリは正常、行は影響を受けました (0.00 秒)
mysql ::>>ユーザー yeyz@'localhost' を削除します。
クエリは正常、行は影響を受けました (0.00 秒)
MySQL ::>>
mysql ::>>yeyz@'%' の権限を表示します。
エラー (): ホスト '%' 上のユーザー 'yeyz' にそのような権限は定義されていません
mysql ::>>yeyz@'localhost' の権限を表示します。
エラー (): ホスト '192.168.18.%' 上のユーザー 'yeyz' に対してそのような権限は定義されていません

ご覧のとおり、権限は完全に削除されています。次に、選択した権限のみを持つユーザーを再作成します。

mysql ::>>パスワード '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' によって識別される 'yeyz'@'localhost' への *.* に対する選択権限を許可します。
クエリは正常、行は影響を受けました (. 秒)

このユーザーを使用してデータベース サービスにログインし、選択、更新、および作成操作を実行しようとします。結果は次のようになります。

[dba_mysql@tk-dba-mysql-stat-10-104 ~]$ /usr/local/mysql/bin/mysql -uyeyz --socket=/data/mysql_4306/tmp/mysql.sock --port=4306 -p -hlocalhost
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは 
サーバーバージョン: 5.5.19-log MySQL コミュニティサーバー (GPL)

Copyright (c) 、Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql ::>>yeyz.yeyz から * を選択します。
+------+
|id|
+------+
| |
| |
| |
+------+
 セット内の行数 (0.00 秒)

mysql ::>>update yeyz.yeyz set id= where id=;
エラー (): テーブル 'yeyz' に対する UPDATE コマンドがユーザー 'yeyz'@'localhost' に拒否されました
mysql ::>>テーブルテストを作成します(id int);
エラー (D000): データベースが選択されていません
mysql ::>>テーブルyeyz.test(id int)を作成します。
エラー (): テーブル 'test' に対する CREATE コマンドがユーザー 'yeyz'@'localhost' に拒否されました

このユーザーは選択操作のみ実行できることがわかります。更新および作成操作を実行しようとすると、システムはそのような操作に対する権限がないと判断し、直接拒否します。つまり、drop user メソッドを使用してユーザーを削除すると、db テーブルと権限テーブルが一緒にクリアされます。言い換えれば、削除は比較的クリーンであり、将来のユーザーに影響を与えることはありません。

結論は:

ユーザーを削除する場合は、drop user メソッドを使用するようにしてください。delete メソッドを使用すると、隠れた危険が発生する可能性があります。次回同じ名前のユーザーを作成すると、権限制御に問題が発生します。

このデモンストレーションは、初心者の友人の疑問も解決します。使用権限しか持たないユーザーが、なぜすべてのデータベースにアクセスして操作を実行できるのでしょうか?このとき、ログをチェックして、mysql.user から削除操作を実行したかどうかを確認する必要があります。実行した場合、この問題は簡単に説明できます。

上記は、2つのMySQLユーザー削除ステートメント(delete userとdrop user)の違いの詳細な内容です。MySQLユーザー削除の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • mysqlはルートユーザーと一般ユーザーを作成し、機能を変更および削除します。
  • MySQL は、ユーザーの作成、ユーザーの承認、ユーザー権限の取り消し、ユーザー パスワードの変更、およびユーザーの削除を行います (実用的なヒント)
  • mysql5.7 ユーザー権限の作成、ユーザーの削除、権限の取り消し
  • MySql のインストールと設定方法 (MySQL ユーザーの追加、ユーザーの削除、認証)
  • MySQL ユーザーを初期化する (匿名ユーザーを削除する)
  • MySQL でのユーザー認証と認証削除の方法
  • WIN コマンドプロンプトで MySQL ユーザーのパスワードを作成、承認、削除、変更する
  • MySQLユーザー削除バグを解決する

<<:  UDP 接続オブジェクトの原理分析と使用例

>>:  Vue における属性とプロパティの具体的な使用法と違い

推薦する

MySQL の選択、挿入、更新バッチ操作ステートメントのコード例

プロジェクトでは、データを操作するためにバッチ操作ステートメントが必要になることがよくあります。バッ...

Mac でソースコードから MySQL 5.7.17 をコンパイルしてインストールするチュートリアル

1. ダウンロードして解凍します: /Users/xiechunping/Softwares/mys...

MySQLは適切なストレージエンジンを選択します

データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...

MySQL ストレステストツール Mysqlslap の使用

1. MySQL独自のストレステストツールMysqlslap mysqlslap は、mysql に...

血の写輪眼と輪廻眼の特殊効果コードを実現するためのHTML+CSS

結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

Dockerのネットワークモードと設定方法

1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...

opensslを使用して無料の証明書を生成する方法

1: openssl とは何ですか? その機能は何ですか?適用シナリオは何ですか? Baidu 百科...

CentOS8 で MySQL 8.0 をインストールしてデプロイする方法

MySQL 8 の公式バージョン 8.0.11 がリリースされました。公式発表によると、MySQL ...

Linux ブートシステム方式の分析

この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...

Hyper-V なしで Windows 10 を動作させるソリューション

Windows10 Home Edition でHyper-vを有効にする方法をまだ探していますか?...

Windows Server 2016 標準キー アクティベーション キー シリアル番号

Windows Server 2016 アクティベーション キーを皆さんと共有したいと思います。wi...

MySQL の自己結合重複排除に関する注意事項

機能シナリオを簡単に説明しましょう。データ行フィールドは次のとおりです。名前開始日時タイプこの表では...

Vue ベースの要素ボタン権限実装ソリューション

背景要件: ERP システムに「ボタン権限制御」機能を追加する必要があり、権限の制御粒度をボタン レ...

Nginx ソースコードのコンパイルとインストールのプロセス記録

rpm パッケージのインストールは比較的簡単なので、ここでは説明しません。ほとんどのオープンソース ...