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 サービスを構築

推薦する

tbodyタグの魔法はテーブルコンテンツの表示を高速化します

他の人のウェブページを保存して見たことがあると思いますが、特にdwで開くと、多くのウェブページに&l...

Vue で Excel インポート機能を実装する詳細な手順

1. フロントエンド主導の実装手順最初のステップは、ページのインポートボタンをクリックしてExcel...

検証コードケースのjs実装

この記事の例では、検証コードを実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

Docker の MySQL コンテナのタイムゾーン問題の修正

序文Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コ...

Ubuntu サーバーで MySQL を設定し、リモート接続を実装する方法

サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...

Docker用国産イメージウェアハウスの使い方

1. 問題の説明何らかの理由により、中国でのDockerイメージのダウンロード速度は特に遅くなります...

Nginx の構成と HTTP 実装コード分析との互換性

OpenSSL を使用して SSL キーと CSR ファイルを生成するHTTPS を設定するには、秘...

JavaScript は自由に移動するウィンドウのマウス制御を実装します

この記事では、フリーウィンドウのマウス制御を実現するためのJavaScriptの具体的なコードを参考...

JSキャンバスは描画ボードと署名ボードの機能を実現します

この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

CSS で左上の三角形を作成するいくつかの方法の詳細な説明

今日は、CSS を使用して左上の三角形を記述するいくつかの方法を紹介します。概略図(幅と高さを60p...

Dockerのセキュリティについて Docker-TLS暗号化通信の問題

目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...

CSS transform-originプロパティを理解する

序文最近、花火アニメーションを作成しました。花火が散るアニメーションです。アニメーションの実装中、花...

Linux の権限管理コマンド (chmod/chown/chgrp/unmask) の詳細な説明

目次chmod例権限に関する特別な注意分析するチョーンchgrp umask Linux オペレーテ...

MySQL での and or クエリの優先度分析

これは見落とされがちな問題かもしれません。まず、次の点を明確にする必要があります。 MySQL では...