# Az - MySQL データベース

{{#include ../../../banners/hacktricks-training.md}}

## Azure MySQL
Azure Database for MySQL は、MySQL Community Edition に基づいた完全管理型リレーショナルデータベースサービスで、さまざまなアプリケーションニーズに対してスケーラビリティ、セキュリティ、柔軟性を提供するように設計されています。2つの異なるデプロイメントモデルがあります：

* **Single Server** (引退の道を歩んでいます):
- コスト効率が高く、管理が容易な MySQL デプロイメントに最適化されています。
- 自動バックアップ、高可用性、基本的な監視機能が含まれています。
- 予測可能なワークロードを持つアプリケーションに最適です。
* **Flexible Server**:
- データベース管理と構成に対するより多くの制御を提供します。
- 高可用性をサポートします（同ゾーンおよびゾーン冗長）。
- 弾力的なスケーリング、パッチ管理、ワークロード最適化の機能があります。
- コスト削減のための停止/開始機能を提供します。

### 主な機能
* **サーバー管理**: **ad-admin** 機能により、MySQL サーバーの Azure Entra ID 管理者を管理でき、Entra ID 認証情報を介して管理アクセスを制御できます。Mysql は、認証情報なしで認証を行うために使用されるユーザー管理アイデンティティをサポートしており、他のサービスによって使用されることがあります。
* **ライフサイクル管理**: サーバーの開始または停止、フレキシブルサーバーインスタンスの削除、構成変更を迅速に適用するためのサーバーの再起動、オートメーションスクリプトを進める前に特定の条件を満たすことを確認するための待機オプションがあります。
* **セキュリティとネットワーキング**: 特定のパブリック IP アドレスのみを許可するファイアウォールルールを通じて接続を制限することでサーバーを保護するか、サーバーを仮想ネットワークに統合するプライベートエンドポイントを使用します。すべての接続は TLS 1.2 暗号化で保護されています。データベース、バックアップ、およびログは、デフォルトでサービス管理キーまたはカスタムキーを使用して静止状態で暗号化されています。
* **データ保護とバックアップ**: データ回復のためのフレキシブルサーバーのバックアップを管理するオプション、異なるリージョンでサーバーを回復するためのジオリストア、外部使用のためのサーバーバックアップのエクスポート（プレビュー中）、および特定の時点にバックアップからサーバーを復元するオプションが含まれています。

### 列挙

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all flexible-servers
az mysql flexible-server db list --resource-group <resource-group-name>
# List databases in a flexible-server
az mysql flexible-server db list --resource-group <resource-group-name> --server-name <server_name>
# Show specific details of a MySQL database
az mysql flexible-server db show --resource-group <resource-group-name> --server-name <server_name> --database-name <database_name>

# List firewall rules of the a server
az mysql flexible-server firewall-rule list --resource-group <resource-group-name> --name <server_name>

# List all ad-admin in a server
az mysql flexible-server ad-admin list --resource-group <resource-group-name> --server-name <server_name>
# List all user assigned managed identities from the server
az mysql flexible-server identity list --resource-group <resource-group-name> --server-name <server_name>

# List the server backups
az mysql flexible-server backup list --resource-group <resource-group-name> --name <server_name>
# List all read replicas for a given server
az mysql flexible-server replica list --resource-group <resource-group-name> --name <server_name>

# Get the server's advanced threat protection setting
az mysql flexible-server advanced-threat-protection-setting show --resource-group <resource-group-name> --name <server_name>
# List all of the maintenances of a flexible server
az mysql flexible-server maintenance list --resource-group <resource-group-name> --server-name <server_name>
# List log files for a server.
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>

```
{{#endtab }}

{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.MySql

# Get all flexible servers in a resource group
Get-AzMySqlFlexibleServer -ResourceGroupName <resource-group-name>

# List databases in a specific flexible server
Get-AzMySqlFlexibleServerDatabase -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get details of a specific database in a flexible server
Get-AzMySqlFlexibleServerDatabase -ResourceGroupName <resource-group-name> -ServerName <server_name> -DatabaseName <database_name>

# List all firewall rules for a flexible server
Get-AzMySqlFlexibleServerFirewallRule -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get the identity information of a flexible server
Get-AzMySqlFlexibleServerIdentity -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get the server's advanced threat protection setting
Get-AzMySqlFlexibleServerAdvancedThreatProtection -ResourceGroupName <resource-group-name> -ServerName <server_name>

# List configuration settings of a flexible server
Get-AzMySqlFlexibleServerConfiguration -ResourceGroupName <resource-group-name> -ServerName <server_name>
# Get the connection string for a flexible server
Get-AzMySqlFlexibleServerConnectionString -ResourceGroupName <resource-group-name> -ServerName <server_name> -Client <client>

# List all read replicas for a given server
Get-AzMySqlFlexibleServerReplica -ResourceGroupName <resource-group-name> -ServerName <server_name>

# Get the maintenance window details for a flexible server
Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-name> -ServerName <server_name>

# List log files for a server
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
```
{{#endtab }}
{{#endtabs }}

### 接続

拡張機能 rdbms-connect を使用すると、次のようにデータベースにアクセスできます:
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive

#or execute commands
az mysql flexible-server execute \
-n <server-name> \
-u <username> \
-p "<password>" \
-d <database-name> \
--querytext "SELECT * FROM <table-name>;"

```
MySQLネイティブ拡張プラグインを使用して
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
また、GitHubを使用してクエリを実行することもできますが、パスワードとユーザーも必要です。実行するクエリを含むSQLファイルを設定する必要があります。その後:
```bash
# Setup
az mysql flexible-server deploy setup \
-s <server-name> \
-g <resource-group> \
-u <admin-user> \
-p "<admin-password>" \
--sql-file <path-to-sql-file> \
--repo <github-username/repository-name> \
--branch <branch-name> \
--action-name <action-name> \
--allow-push

# Run it
az mysql flexible-server deploy run \
--action-name <action-name> \
--branch <branch-name>
```
## 権限昇格

{{#ref}}
../az-privilege-escalation/az-mysql-privesc.md
{{#endref}}

## ポストエクスプロイト

{{#ref}}
../az-post-exploitation/az-mysql-post-exploitation.md
{{#endref}}

## ToDo

* mysql flexible-server ad-admin にアクセスする方法を探して、これは権限昇格の手法であることを確認する



{{#include ../../../banners/hacktricks-training.md}}
