MySQL ユーザーと権限、およびルートパスワードをクラックする方法の例

MySQL ユーザーと権限、およびルートパスワードをクラックする方法の例

MySQL ユーザーと権限

MySQL には、MySQL と呼ばれるシステムに付属するデータベースがあります。データベースをインストールすると、システムにはいくつかのデータベースが付属しますが、MySQL はその 1 つです。MySQL データベースには、ユーザー テーブルと呼ばれるユーザー アカウント権限に関連するテーブルがあり、作成されたユーザーが含まれています。

MySQL の完全なユーザー名は、ユーザー + ホスト名で構成されます。ホスト名によって、ユーザーがログインできるホストが決まります。

1. ユーザーの作成とパスワードの変更

1. ユーザーの作成

'PASSWORD' で識別されるユーザー 'USERNAME'@'HOST' を作成します。

ユーザー名: ユーザー名
HOST: ホストアドレス
パスワード: パスワード

例:

MariaDB [(なし)]> 'centos' で識別されるユーザー [email protected] を作成します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

MariaDB [(なし)]> mysql.user からユーザー、ホスト、パスワードを選択します。
+--------+-----------------------+--------------------------------------------------------+
| ユーザー | ホスト | パスワード |
+--------+-----------------------+--------------------------------------------------------+
| ルート | ローカルホスト | |
| ルート | localhost.localdomain | |
| ルート | 127.0.0.1 | |
| ルート | ::1 | |
| | ローカルホスト | |
| | ローカルホスト.ローカルドメイン | |
| マスリ | 192.168.73.133 | *128977E278358FF80A246B5046F51043A2B1FCED |
+--------+-----------------------+--------------------------------------------------------+
セット内の行数は 7 です (0.00 秒)

MySQL には匿名アカウントがあり、セキュリティ強化スクリプト mysql_secure_installation を実行して削除することも、手動で削除することもできます。

ユーザーを削除するには:

ユーザー 'ユーザー名'@'ホスト' を削除します。

例:

MariaDB [(なし)]> mysql.user からユーザー、ホスト、パスワードを選択します。
+--------+-----------------------+--------------------------------------------------------+
| ユーザー | ホスト | パスワード |
+--------+-----------------------+--------------------------------------------------------+
| ルート | ローカルホスト | |
| ルート | localhost.localdomain | |
| ルート | 127.0.0.1 | |
| ルート | ::1 | |
| | ローカルホスト | |
| | ローカルホスト.ローカルドメイン | |
| マスリ | 192.168.73.133 | *128977E278358FF80A246B5046F51043A2B1FCED |
+--------+-----------------------+--------------------------------------------------------+
セット内の行数は 7 です (0.00 秒)

MariaDB [(なし)]> DROP USER ''@'localhost';
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> DROP USER ''@'localhost.localdomain';
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> mysql.user からユーザー、ホスト、パスワードを選択します。
+--------+-----------------------+--------------------------------------------------------+
| ユーザー | ホスト | パスワード |
+--------+-----------------------+--------------------------------------------------------+
| ルート | ローカルホスト | |
| ルート | localhost.localdomain | |
| ルート | 127.0.0.1 | |
| ルート | ::1 | |
| マスリ | 192.168.73.133 | *128977E278358FF80A246B5046F51043A2B1FCED |
+--------+-----------------------+--------------------------------------------------------+
セット内の行数は 5 です (0.00 秒)

2. パスワードの変更

MySQLのパスワードを変更する

ユーザーのパスワードを設定する = PASSWORD('クリアテキストパスワード')
UPDATE テーブル SET パスワード = password('クリアテキスト パスワード')

例:

masuriユーザーのパスワードを変更する

MariaDB [(なし)]> [email protected] のパスワードを設定する = PASSWORD ('magedu');
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> mysql.user からユーザー、ホスト、パスワードを選択します。
+--------+-----------------------+--------------------------------------------------------+
| ユーザー | ホスト | パスワード |
+--------+-----------------------+--------------------------------------------------------+
| ルート | ローカルホスト | |
| ルート | localhost.localdomain | |
| ルート | 127.0.0.1 | |
| ルート | ::1 | |
| マスリ | 192.168.73.133 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+--------+-----------------------+--------------------------------------------------------+
#パスワードは現在変更されています

ルートアカウントのパスワードが空です。ルートパスワードを設定します。いちいち設定するのは面倒なので、テーブル変更操作を使ってパスワードを変更することもできます。

MariaDB [(なし)]> mysql.user を更新し、password=password('centos') を設定し、user='root' とします。
クエリは正常、4 行が影響を受けました (0.01 秒)
一致した行: 4 変更された行: 4 警告: 0

MariaDB [(なし)]> mysql.user からユーザー、ホスト、パスワードを選択します。
+--------+-----------------------+--------------------------------------------------------+
| ユーザー | ホスト | パスワード |
+--------+-----------------------+--------------------------------------------------------+
| ルート | ローカルホスト | *128977E278358FF80A246B5046F51043A2B1FCED |
| ルート | localhost.localdomain | *128977E278358FF80A246B5046F51043A2B1FCED |
| ルート | 127.0.0.1 | *128977E278358FF80A246B5046F51043A2B1FCED |
| ルート | ::1 | *128977E278358FF80A246B5046F51043A2B1FCED |
| マスリ | 192.168.73.133 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+--------+-----------------------+--------------------------------------------------------+
セット内の行数は 5 です (0.00 秒)

現時点では、パスワードは変更されていますが、まだログインできません。権限を更新する必要があります。

MariaDB [(なし)]> FLUSH PRIVILEGES;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

2. MySQL 権限管理

権限管理には、管理、プログラム、データベース レベル、テーブル レベル、フィールド レベルなど、複数のカテゴリの権限が含まれます。

管理: ユーザーを作成できるかどうか、データベース リストを表示できるかどうか、構成ファイルを再ロードできるかどうか、データベースを閉じることができるかどうか、レプリケーションに関連する機能を実行できるかどうか、プロセスを管理できるかどうか、一時テーブルを作成できるかどうか、データベース内のファイルを作成できるかどうか。

プログラムには、主に関数、ストアド プロシージャ、トリガーの 3 種類のプログラムが含まれます。たとえば、これらのプログラムを作成、変更、削除、実行できます。また、ライブラリ、テーブル、フィールド レベルで権限を使用することもできます。たとえば、ライブラリ、テーブル、フィールドで操作を追加、削除、クエリ、変更することができます。

1. 認可 GRANT

ユーザーを認証する際に、ユーザーが存在しない場合は作成することができます。認証する前に、認証権限を持つ管理者であることを確認する必要があります。

付与 
 priv_type [(列リスト)]
  [, priv_type [(列リスト)]] ...
 ON [オブジェクトタイプ] 特権レベル
 TO user_specification [, user_specification] ...
 [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
 [with_option と共に...]

例:

WordPress ユーザーを作成し、承認します。

MariaDB [(なし)]> CREATE DATABASE wordpress;
クエリは正常、1 行が影響を受けました (0.02 秒)

MariaDB [(なし)]> 'mylinuxops' によって識別される wpuser@'192.168.73.%' に wordpress.* のすべての権限を付与します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

2. ユーザーの権限を確認する

MariaDB [(なし)]> wpuser@'192.168.73.%' の権限を表示します。
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| [email protected].% への許可 |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| パスワード '*EC0DBFB480593BB6ED2EC028A4231A72D8137406' で識別される 'wpuser'@'192.168.73.%' に *.* の使用を許可 |
| `wordpress`.* のすべての権限を 'wpuser'@'192.168.73.%' に付与します |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
セット内の 2 行 (0.00 秒)

3. 認可のためのその他のオプション

MAX_QUESRIES_PER_HOUR count #1 時間あたりのクエリの最大数 MAX_UPDATES_PER_HOUR count #1 時間あたりの変更の最大数 MAX_CONNECTIONS_PER_HOUR count #1 時間あたりの接続の最大数 MAX_USER_CONNECTIONS count #ユーザー接続の最大数

権限を取り消す

取り消す
 priv_type [(列リスト)]
  [, priv_type [(列リスト)]] ...
 ON [オブジェクトタイプ] 特権レベル
 ユーザー[、ユーザー]から...

例:

MariaDB [(なし)]> wordpress.* の wpuser@'192.168.73.%' からの削除を取り消します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

MariaDB [(なし)]> wpuser@'192.168.73.%' の権限を表示します。
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [email protected].% への許可 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| パスワード '*EC0DBFB480593BB6ED2EC028A4231A72D8137406' で識別される 'wpuser'@'192.168.73.%' に *.* の使用を許可 |
| 'wpuser'@'192.168.73.%' に対して、`wordpress`.* に対して SELECT、INSERT、UPDATE、CREATE、DROP、REFERENCES、INDEX、ALTER、CREATE TEMPORARY TABLES、LOCK TABLES、EXECUTE、CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、EVENT、TRIGGER の権限を付与します |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
セット内の 2 行 (0.00 秒)
# この時点で、wpuser@'192.168.73.%' には削除権限がありません

MySQL ルートパスワードのクラッキング

作業中にルート パスワードを紛失してしまうことがあります。ルート パスワードを取得するには、次の方法を使用できます。

以下はルートパスワードを解読する方法のデモンストレーションです

1. パスワードが不明なためMySQLにログインできない

[root@localhost ~]# mysql
エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワード使用: NO)

2. クラッキング

1. 設定ファイル/etc/my.cnfを変更し、2行のパラメータを追加します。

skip_grant_tables: 認証テーブル情報をスキップします。このオプションを有効にすると、MySQL を再度使用するためにパスワードを使用する必要がなくなりますが、他のリモート ユーザーもパスワードなしでログインできるため、一定のリスクがあります。

skip_networking: ネットワーク機能をオフにします。skip_grant_tables オプションのみを有効にすると、他のユーザーがパスワードなしで MySQL にログインできてしまい、非常に危険です。そのため、ネットワーク機能をオフにして、ローカルユーザーのみが操作できるようにする必要があります。

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
skip_networking=on #ネットワーク機能を有効にしない skip_grant_tables=on #認証テーブルをスキップする [root@localhost ~]# service mysqld restart #ロケーションファイルを変更した後、サービスを再起動する必要があります mysqld を再起動しています (systemctl 経由): [ OK ]

2. MySQLにログインしてパスワードを変更する

[root@localhost ~]# mysql #パスワードを入力せずにログインできます。MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは11です
サーバーバージョン: 10.2.23-MariaDB-log ソース配布

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

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

MariaDB [(なし)]> UPDATE mysql.user SET password=PASSWORD('123456') where user='root'; #ルートパスワードを変更します クエリは正常です。4 行が影響を受けました (0.01 秒)
一致した行: 4 変更された行: 4 警告: 0

3. パスワードを変更した後、設定ファイルを復元する必要があります。

有効にした2つのオプションを登録解除または削除し、サービスを再起動します。

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
#ネットワークをスキップ=オン   
#skip_grant_tables=オン   

[root@localhost ~]# サービスmysqldを再起動します
mysqld を再起動しています (systemctl 経由): [ OK ]

4. 新しいパスワードを使用してMySQLにログインします

[root@localhost ~]# mysql -uroot -p123456 
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MariaDB接続IDは10です
サーバーバージョン: 10.2.23-MariaDB-log ソース配布

Copyright (c) 2000、2018、Oracle、MariaDB Corporation Ab およびその他。

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

MariaDB [(なし)]> 

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL のユーザー権限を照会する方法の概要
  • 新しいユーザーを作成し、MySQLに権限を付与する最も簡単な方法
  • MySQLユーザーと権限管理の詳細な説明
  • mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明
  • MySQLのユーザーアカウント管理と権限管理の詳細な説明
  • mysql8.0 でユーザーを作成して権限を付与する際のエラーの解決方法の詳細な説明
  • MySQLのユーザー権限の確認と管理方法の詳細な説明
  • MySQL でローカル ユーザーを作成し、データベース権限を付与する方法の例
  • MySQLユーザー権限管理の詳細な説明
  • MySqlは指定されたユーザーのデータベースビュークエリ権限を設定します

<<:  Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

>>:  Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

推薦する

CentOSにDockerをインストールする方法

ここでは比較的簡単なインストール方法のみを紹介します。 1. yumを使用してインストールするyum...

JavaScript演算子の使用に関するヒントをいくつか共有します

目次1. オプションの連鎖演算子 [? .】 2. 論理的な空の代入 (?? =) 3. 論理和代入...

知らないかもしれないmysqldumpパラメータ

前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...

Docker で SVN サーバーを構築するチュートリアル

SVN は Subversion の略称で、ブランチ管理システムを使用して効率的に管理するオープンソ...

Sublime TextがUbuntuで中国語を入力できない問題の最も簡単な解決策

崇高なSublime Text はコード エディター (Sublime Text2 は有料ソフトウェ...

Javascript と Vue を組み合わせて、あらゆる迷路画像の自動パス検索を実現します。

目次序文2次元配列、一方向基本インターフェースのマッピング幅優先、包括的検索マップ編集経路探索アルゴ...

Reactはページング効果を実装する

この記事では、Reactでページング効果を実現するための具体的なコードを参考までに紹介します。具体的...

Web ページのソース ファイルを表示できない場合はどうすればよいですか?

Q: Outlook または IE のどちらを使用している場合でも、マウスを右クリックすると、ポッ...

MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標...

仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法

かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...

HTMLはテキスト行のインターセプトの実装原理とコードを超えています

複数行を超えるテキストをインターセプトするための HTML コードは次のとおりです。 HTML:コー...

CentOS 8にJenkinsをインストールする方法

CentOS 8 に Jenkins をインストールするには、root アカウントまたは sudo ...

MySQL におけるユニーク制約と NULL の詳細な説明

序文説明を簡略化するために以前に設定した要件は、他のグループから MQ メッセージを受信し、データベ...

MySQL の挿入ステートメントの使用実体験

目次1. 挿入のいくつかの構文1-1. 通常の挿入文1-2. 挿入または更新1-3. 挿入または交換...

MySQL 基本チュートリアル パート 1 MySQL5.7.18 のインストールと接続チュートリアル

この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...