Microsoft  Fabric Warehouse の SQL 監査ログを有効にして内容確認

## はじめに

ようやく東日本でも機能を有効化できたので記録

https://learn.microsoft.com/ja-jp/fabric/data-warehouse/sql-audit-logs

https://learn.microsoft.com/ja-jp/fabric/data-warehouse/configure-sql-audit-logs?tabs=browser

## 有効化手順

### ID の確認

ウェアハウスに移動して URL から確認可能。workspace id , item id という順

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/01fe1c1e-8893-4f49-ad3e-4aaa945a63d5.png)


### API の呼び出し

python notebook で実行する

1. ステータス確認
    ```python:python
    
    import json
    from sempy import fabric 
    client = fabric.FabricRestClient()
    
    workspaceId="<workspace id >"
    warehouseId="<item id >"
    get_audit_status_url = f"v1/workspaces/{workspaceId}/warehouses/{warehouseId}/settings/sqlAudit"
    
    status_response = client.get(get_audit_status_url)
    status = json.loads(status_response.content)
    status
    
    ```
    
    結果：
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a9e338f2-cc53-402d-af71-6ba66e3f4d3d.png)

1. 有効化　今回は期間だけ指定
    ```python:python
    patch_audit_enable_url = f"v1/workspaces/{workspaceId}/warehouses/{warehouseId}/settings/sqlAudit"
    // 必要に応じてペイロード内容を設定し、監査ログ対象を追加する
    enable_data = {
      "state": "Enabled",
      "retentionDays": "730"
    }
    
    enable_response = client.patch(get_audit_status_url,data=enable_data)
    result = json.loads(enable_response.content)
    result
    
    
    ```

    結果：
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3c0f2a76-27f5-4ed1-a6fa-3d74edf023e6.png)

    既定では、['BATCH_COMPLETED_GROUP',  'FAILED_DATABASE_AUTHENTICATION_GROUP',  'SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP'] がログの対象となっている。なお、FAILED_DATABASE_AUTHENTICATION_GROUP 以外はまだ docsには記載がない。

    完全な一致ではないが、 Azure SQL などと仕様が同じようなので、記載されていないアクショングループは[SQL Server 監査のアクション グループとアクション](https://learn.microsoft.com/ja-jp/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-ver16) を参考にできる。
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cfe2724c-d092-455d-9b83-ca8348a2f04c.png)


## 挙動確認

1. 適当なクエリを実行
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/32e497f2-874f-425f-9699-483ae521d00e.png)

2. ログをクエリ
    ```sql:sql
    
    SELECT TOP 100 *
    FROM sys. fn_get_audit_file_v2(
        'https://onelake.blob.fabric.microsoft.com/<workspace id>/<item id>/Audit/sqldbauditlogs/',
        DEFAULT,
        DEFAULT,
        DEFAULT,
        DEFAULT)
    order by 1 desc
    ```

    [sys.fn_get_audit_file_v2](https://learn.microsoft.com/ja-jp/sql/relational-databases/system-functions/sys-fn-get-audit-file-v2-transact-sql?view=fabric&preserve-view=true ) によると、実行したSQLが格納される statement 列の文字長は nvarchar(4000)　だが、シーケンス No でレコードを分割して対応できていそう。
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0c9d84db-069e-4264-be88-3b8784e3c4e5.png)
    
    マルチバイト文字に関しても問題なくログ取得されている
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/94806086-facf-457f-b682-1e43d5175592.png)

    

## レイクハウスの SQL 分析エンドポイントでは？

ステータスは確認できたが、有効化は不可だった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/90942349-ba39-4686-9e3b-19b908ec8d2e.png)