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

推薦する

base target="" はフレームを開くためのベースリンクのターゲットを指定します

<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...

Mysql マスタースレーブ同期 Last_IO_Errno:1236 エラー解決

Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...

JavaScript の知識: コンストラクタも関数である

目次1. コンストラクタの定義と呼び出し2. 新しいキーワードの目的3. コンストラクタの問題: メ...

MYSQL データベースの基礎 - 結合操作の原理

結合では、ネスト ループ結合アルゴリズムが使用されます。ネスト ループ結合には 3 つの種類がありま...

VMwareワークステーションとデバイス/資格情報の非互換性によって発生する起動エラーについて

VMware Workstationsが仮想マシンエラーを起動する エラー レポートのリンク htt...

ウェブデザインにおけるインタラクション: ページングの問題に関する簡単な説明

機能: 前のページまたは次のページにジャンプします。要素: ページングの基本要素は、前のページ + ...

MySQL ストアド プロシージャと共通関数のコード分析

mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...

MySQL でトランザクションのコミットとロールバックを実装する方法の詳細な例

最近、データベース データのスケジュールされた移行を実行する必要があります。実行プロセス中に何らかの...

MySQLとNavicatプレミアムのインストールと設定の詳細な手順

前提条件: Mac、zsh がインストールされ、bash のときに mysql がダウンロードされ、...

ES9の新機能の詳細な説明: 非同期反復

目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...

MySQL 最適化: キャッシュ最適化 (続き)

MySQL 内部には至るところにキャッシュがあります。MySQL のソースコードを読むと、キャッシ...

docker run後にコンテナがExited (0)と表示される問題を解決する

Centos7 上で openresty 用の Dockerfile を作成し、ビルドしました。 d...

Dockerが独自のローカルイメージリポジトリを構築するための手順

1. 環境と準備1. Ubuntu 14.04 2.Docker環境2. 建設プロセス1. ミラーソ...

MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例

GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリ...

CocosCreatorでWeChatゲームを作成する方法

目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...