Audit log
An audit log is a stream of records that document the operation of the YDB cluster. Unlike technical logs, which help detect failures and troubleshoot issues, the audit log provides data relevant to security. It serves as a source of information that answers the questions: who did what, when, and from where.
A single audit log record may look like this:
{"@timestamp":"2025-11-03T18:07:39.056211Z","@log_type":"audit","operation":"ExecuteQueryRequest","database":"/my_dir/db1","status":"SUCCESS","subject":"serviceaccount@as","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]"}
Examples of typical audit log events:
- Data access through DML requests.
- Schema or configuration management operations.
- Changes to permissions or access-control settings.
- Administrative user actions.
The audit_config section in the cluster configuration defines which audit logs are collected, how they need to be serialized and where they are delivered. See the audit log configuration section for details.
Key concepts
Audit events
An audit event is a record in the audit log that captures a single security-relevant action. Every event includes attributes that describe different aspects of the event. The common attributes are listed in the Common attributes section.
Audit event sources
An audit event source is a YDB service or subsystem that can emit audit events. Each source is identified by a unique identifier (UID) and may expose additional attributes specific to the component. Some sources require extra configuration, such as feature flags, before the source starts emitting events. See the Audit event sources overview for details.
Log classes
Audit events are grouped into log classes that represent broad categories of operations. You can enable or disable logging for each class in configuration and, if necessary, tailor the configuration per class. The available log classes are:
|
Log class |
Description |
|
|
Cluster administration requests. |
|
|
Database administration requests. |
|
|
Login requests. |
|
|
Node registration. |
|
|
DDL requests. |
|
|
DML requests. |
|
|
Asynchronous remote procedure call (RPC) operations that require polling to track the result. |
|
|
Export and import data operations. |
|
|
Access Control List (ACL) operations. |
|
|
Synthetic heartbeat messages that confirm audit logging remains operational. |
|
|
Default settings for any component that doesn't have a configuration entry. |
At the moment, not all audit event sources categorize events into log classes. For most of them, the basic configuration is sufficient to capture their events. See the Audit event sources overview section for details.
Log phases
Some audit event sources divide the request processing into stages. Logging phase indicates the processing stages at which audit logging records events. Specifying logging phases is useful when you need fine-grained visibility into request execution and want to capture events before and after critical processing steps. The available log phases are:
|
Log phase |
Description |
|
|
A request is received and the initial checks and authentication are made. The |
|
|
A request is completely finished. The |
Audit log destinations
Audit log destination is a target where the audit log stream can be delivered.
You can currently configure the following destinations for the audit log:
- A file on each YDB cluster node.
- An agent for delivering Unified Agent metrics.
- The standard error stream,
stderr.
You can use any of the listed destinations or their combinations. See the audit log configuration for details.
If you forward the stream to a file, file-system permissions control access to the audit log. Saving the audit log to a file is recommended for production installations.
For test installations, forward the audit log to the standard error stream (stderr). Further stream processing depends on the YDB cluster logging settings.
Audit event sources overview
The table below summarizes the built-in audit event sources. Use it to identify which source emits the events you need and how to enable those events.
|
Source / UID |
What it records |
Configuration requirements |
|
Schemeshard |
Schema operations, ACL modifications, and user management actions. |
Included in the basic audit configuration. |
|
gRPC services |
Non-internal requests handled by YDB gRPC endpoints. |
Enable the relevant log classes and optional log phases. |
|
gRPC connection |
Client connection and disconnection events. |
Enable the |
|
gRPC authentication |
gRPC authentication attempts. |
Enable the |
|
Monitoring service |
HTTP requests handled by the monitoring endpoint. |
Enable the |
|
Heartbeat |
Synthetic heartbeat events proving that audit logging is alive. |
Enable the |
|
Console-driven BlobStorage Controller configuration changes. |
Included in the basic audit configuration. |
|
|
Distconf |
Distributed configuration updates. |
Included in the basic audit configuration. |
|
Web login |
Interactions with the web console authentication widget. |
Included in the basic audit configuration. |
|
Console |
Database lifecycle operations and dynamic configuration changes. |
Included in the basic audit configuration. |
Audit event attributes
Audit log event attributes are divided into two groups:
- Common attributes present in many audit event sources and always carry the same meaning.
- Attributes specific to the source that generates the event.
In this section, you will find a reference guide to the attributes in audit events. It covers both common attributes and source-specific ones. For each source, its UID, recorded operations, and configuration requirements are also provided.
Common attributes
The table below lists the common attributes.
|
Attribute |
Description |
|
|
Event source SID if mandatory authentication is enabled, or |
|
|
A partially masked authentication token that was used to execute the request. Can be used to link related events while keeping the original credentials hidden. If authentication was not performed, the value will be |
|
|
Operation name (for example, |
|
|
Unique identifier (UID) of the audit event source. |
|
|
Operation completion status.
|
|
|
Error message. |
|
|
Unique ID of the request that invoked the operation. You can use the |
|
|
IP of the client that delivered the request. |
|
|
The status delivered by a YDB audit event source. |
|
|
Database path (for example, |
|
|
Cloud identifier of the YDB database. |
|
|
Folder identifier of the YDB cluster or database. |
|
|
Resource identifier of the YDB database. |
Schemeshard
UID: schemeshard.
Logged operations: Schema operations triggered by DDL queries, ACL modifications, and user management operations.
How to enable: Only basic audit configuration required.
The table below lists additional attributes specific to the Schemeshard source.
|
Attribute |
Description |
|
Common schemeshard attributes |
> |
|
|
Unique transaction ID. This ID can be used to differentiate events related to different operations.Required. |
|
|
List of paths in the database that are changed by the operation (for example, |
|
Ownership and permission attributes |
> |
|
|
SID of the new owner of the object when ownership is transferred. |
|
|
List of added permissions in short notation (for example, |
|
|
List of revoked permissions in short notation (for example, |
|
Custom attributes |
> |
|
|
List of custom attributes added when creating objects or updating attributes (for example, |
|
|
List of custom attributes removed when creating objects or updating attributes (for example, |
|
Login/Auth specific |
> |
|
|
User name recorded by login operations. |
|
|
Group name recorded by login operations. |
|
|
Membership changes. |
|
|
Changes applied to user settings. |
|
|
Privilege level of the user recorded by audit events. This attribute only uses the |
|
Import/Export operation attributes |
> |
|
|
Unique identifier for export or import operations. |
|
|
User-defined label for operations. |
|
|
Operation start time in ISO 8601 format. |
|
|
Operation end time in ISO 8601 format. |
|
|
User's last successful login time in ISO 8601 format. |
|
Export-specific |
> |
|
|
Export destination. Possible values: |
|
|
Number of exported items. |
|
|
YT destination path prefix. |
|
|
S3 bucket used for exports. |
|
|
S3 destination prefix. |
|
Import-specific |
> |
|
|
Import source type. It's always |
|
|
Number of imported items. |
|
|
S3 bucket used for imports. |
|
|
S3 source prefix. |
gRPC services
UID: grpc-proxy.
Logged operations: All non-internal gRPC requests.
How to enable: Requires specifying log classes in audit configuration.
Log classes: Depends on the RPC request type: Ddl, Dml, Operations, ClusterAdmin, DatabaseAdmin, or other classes.
Log phases: Received, Completed.
The table below lists additional attributes specific to the gRPC services source.
|
Attribute |
Description |
|
Common gRPC attributes |
> |
|
|
RPC method name.Optional. |
|
|
Sanitized representation of the incoming request.Optional. |
|
|
Operation start time in ISO 8601 format.Required. |
|
|
Operation end time in ISO 8601 format.Optional. |
|
Transaction attributes |
> |
|
|
Transaction identifier. |
|
|
Flag set to |
|
|
Shows whether the request commits the transaction. Possible values: |
|
Request fields |
> |
|
|
Sanitized YQL query text. |
|
|
Identifier of a prepared query. |
|
|
MiniKQL program sent with the request. |
|
|
Description of schema modifications requested in the operation. |
|
|
Full table path. |
|
|
Number of rows processed by a bulk upsert request. |
|
|
Tablet identifier. |
gRPC connection
UID: grpc-conn.
Logged operations: Connection state changes (connect/disconnect).
How to enable: Enable the enable_grpc_audit feature flag.
This source uses only common attributes.
gRPC authentication
UID: grpc-login.
Logged operations: gRPC authentication.
How to enable: Requires specifying log classes in audit configuration.
Log classes: Login.
Log phases: Completed.
The table below lists additional attributes specific to the gRPC authentication source.
|
Attribute |
Description |
|
|
User name. Required. |
|
|
Privilege level of the user recorded by audit events. This attribute only uses the |
Monitoring service
UID: monitoring.
Logged operations: HTTP requests handled by the monitoring service.
How to enable: Requires specifying log classes in audit configuration.
Log classes: ClusterAdmin.
Log phases: Received, Completed.
The table below lists additional attributes specific to the Monitoring service source.
|
Attribute |
Description |
|
|
HTTP request method. For example |
|
|
Request path without query parameters.Required. |
|
|
Raw query parameters.Optional. |
|
|
Request body (truncated to 2 MB with the |
Heartbeat
UID: audit.
Logged operations: Periodic audit heartbeat messages.
How to enable: Enable this source by specifying log classes in audit configuration.
Log classes: AuditHeartbeat.
Log phases: Completed.
The table below lists additional attributes specific to the Heartbeat source.
|
Attribute |
Description |
|
|
Node identifier where the event occurred. Required. |
BlobStorage Controller
UID: bsc.
Logged operations: Configuration replacement requests (TEvControllerReplaceConfigRequest) emitted by the console.
How to enable: Only basic audit configuration required.
The table below lists additional attributes specific to the BlobStorage Controller source.
|
Attribute |
Description |
|
|
Snapshot of the previous BlobStorage Controller configuration in YAML form. Optional. |
|
|
Snapshot of the configuration that replaced the previous one. Optional. |
Distconf
UID: distconf.
Logged operations: Distributed configuration changes.
How to enable: Only basic audit configuration required.
The table below lists additional attributes specific to the Distconf source.
|
Attribute |
Description |
|
|
Snapshot of the configuration that was active before the distributed update was accepted. Distconf serializes it in YAML. Required. |
|
|
Snapshot of the configuration that Distconf committed after the change. Required. |
Web login
UID: web-login.
Logged operations: Tracks interactions with the YDB web console authentication widget.
How to enable: Only basic audit configuration required.
This source uses only common attributes.
Console
UID: console.
Logged operations: Database lifecycle operations and dynamic configuration changes.
How to enable: Only basic audit configuration required.
The table below lists additional attributes specific to the Console source.
|
Attribute |
Description |
|
|
Snapshot of the configuration that was in effect before the console request was applied. Optional. |
|
|
Snapshot of the configuration that the console applied. Optional. |
Audit log configuration
Enabling audit log
Audit logging works cluster-wide. For the basic configuration, add the audit_config section to the cluster configuration and specify one or more stream destinations (file_backend, unified_agent_backend, stderr_backend):
audit_config:
file_backend:
format: audit_log_format
file_path: "path_to_log_file"
unified_agent_backend:
format: audit_log_format
log_name: session_meta_log_name
stderr_backend:
format: audit_log_format
Audit config parameters
All fields are optional.
|
Field |
Description |
|
|
Forward the audit log to the standard error stream ( |
|
|
Write the audit log to a file at each cluster node. See the backend settings for details. |
|
|
Stream the audit log to the Unified Agent. In addition, you need to define the |
|
|
An array of audit rules for different log classes. See the log class configuration. |
|
|
Optional heartbeat configuration. See the heartbeat settings. |
Backend settings
Each backend supports the following fields:
|
Field |
Description |
|
|
Audit log format. The default value is |
|
|
Path to the file that the audit log will be streamed to. If the path and the file are missing, they will be created on each node at cluster startup. If the file exists, the data will be appended to it. Only for |
|
|
The session metadata delivered with the message. Using the metadata, you can redirect the log stream to one or more child channels based on the condition: |
|
|
JSON template that wraps each log record. The template must contain the |
Log format
The format field specifies the serialization format for audit events. The supported formats are:
|
Format |
Description |
|
|
Each audit event is serialized as a single-line JSON object preceded by an ISO 8601 timestamp.Example: |
|
|
Each audit event is serialized as a single-line text string in the |
|
|
Each audit event is serialized as a single-line JSON object suitable for output to destinations shared with debug logs. The object contains the |
Envelope format
Backends can wrap audit events into a custom envelope before delivering them to the backend by specifying the log_json_envelope field. The template must contain the %message% placeholder, which is replaced with the serialized audit record in the selected format.
For example, the following configuration outputs audit events to stderr in JSON format, wrapped in a custom envelope:
audit_config:
stderr_backend:
format: JSON
log_json_envelope: '{"audit": %message%, "source": "ydb-audit-log"}'
See the Example with Envelope JSON section for output details.
Log class configuration
Each entry in log_class_config accepts the following fields:
|
Field |
Description |
|
|
Class name to configure. Uses values from the log classes list. The |
|
|
Enables audit event emission for the selected log class. Disabled by default. |
|
|
Array of account type ( |
|
|
Array of request processing phases to log. See the Log phases. |
Heartbeat settings
Heartbeat events help you monitor the health of the audit logging subsystem. They allow you to create alerts for missing audit events without false positives during periods of no activity.
heartbeat.interval_seconds controls how often audit heartbeat events are written. A value of 0 disables heartbeat messages.
Config samples
Simple configuration. Below is a simple configuration that saves the audit log text to a file in TXT format.
audit_config:
file_backend:
format: TXT
file_path: "/var/log/ydb-audit.log"
Advanced configuration. The following configuration demonstrates more advanced settings:
- It sends the audit log to Unified Agent in
TXTformat with theauditlabel and also outputs it tostderrinJSONformat. - The
Defaultsettings enable logging for all classes in theCompletedphase. - Additionally,
ClusterAdminis configured to log theReceivedphase, andDatabaseAdminis configured to exclude events from anonymous users:
audit_config:
unified_agent_backend:
format: TXT
log_name: audit
stderr_backend:
format: JSON
log_class_config:
- log_class: ClusterAdmin
enable_logging: true
log_phase: [Received, Completed]
- log_class: DatabaseAdmin
enable_logging: true
log_phase: [Completed]
exclude_account_type: [Anonymous]
- log_class: Default
enable_logging: true
heartbeat:
interval_seconds: 60
Examples
The following tabs show the same audit log event written using different backend settings.
The JSON format produces entries like:
2023-03-14T10:41:36.485788Z: {"paths":"[/my_dir/db1/some_dir]","tx_id":"281474976775658","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","sanitized_token":"{none}", "detailed_status":"StatusAccepted","operation":"MODIFY ACL","component":"schemeshard","acl_add":"[+(ConnDB):subject:-]"}
2023-03-13T20:07:30.927210Z: {"reason":"Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)","paths":"[/my_dir/db1/some_dir]","tx_id":"844424930216970","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","sanitized_token":"{none}","detailed_status":"StatusAlreadyExists","operation":"CREATE DIRECTORY","component":"schemeshard"}
2025-11-03T18:07:39.056211Z: {"@log_type":"audit","begin_tx":1,"commit_tx":1,"component":"grpc-proxy","database":"/my_dir/db1","detailed_status":"SUCCESS","end_time":"2025-11-03T18:07:39.056204Z","grpc_method":"Ydb.Query.V1.QueryService/ExecuteQuery","operation":"ExecuteQueryRequest","query_text":"SELECT * FROM `my_row_table`;","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","sanitized_token":"xxxxxxxx.**","start_time":"2025-11-03T18:07:39.054863Z","status":"SUCCESS","subject":"serviceaccount@as"}
2025-11-03T17:41:44.203214Z: {"component":"monitoring","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","operation":"HTTP REQUEST","method":"POST","url":"/viewer/query","params":"base64=false&schema=multipart","body":"{\"query\":\"SELECT * FROM `my_row_table`;\",\"database\":\"/local\",\"action\":\"execute-query\",\"syntax\":\"yql_v1\"}","status":"IN-PROCESS","reason":"Execute"}
The TXT format produces entries like:
2023-03-14T10:41:36.485788Z: component=schemeshard, tx_id=281474976775658, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx, subject={none}, database=/my_dir/db1, operation=MODIFY ACL, paths=[/my_dir/db1/some_dir], status=SUCCESS, detailed_status=StatusSuccess, acl_add=[+(ConnDB):subject:-]
2023-03-13T20:07:30.927210Z: component=schemeshard, tx_id=281474976775657, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx, subject={none}, database=/my_dir/db1, operation=CREATE DIRECTORY, paths=[/my_dir/db1/some_dir], status=SUCCESS, detailed_status=StatusAlreadyExists, reason=Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)
2025-11-03T18:07:39.056211Z: component=grpc-proxy, tx_id=281474976775656, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx, subject=serviceaccount@as, database=/my_dir/db1, operation=ExecuteQueryRequest, query_text=SELECT * FROM `my_row_table`; status=SUCCESS, detailed_status=StatusSuccess, begin_tx=1, commit_tx=1, end_time=2025-11-03T18:07:39.056204Z, grpc_method=Ydb.Query.V1.QueryService/ExecuteQuery, sanitized_token=xxxxxxxx.**, start_time=2025-11-03T18:07:39.054863Z
2025-11-03T17:41:44.203214Z: component=monitoring, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx], operation=HTTP REQUEST, method=POST, url=/viewer/query, params=base64=false&schema=multipart, body={"query":"SELECT * FROM `my_row_table`;","database":"/local","action":"execute-query","syntax":"yql_v1"}, status=IN-PROCESS, reason=Execute
The JSON_LOG_COMPATIBLE format produces entries like:
{"@timestamp":"2023-03-14T10:41:36.485788Z","@log_type":"audit","paths":"[/my_dir/db1/some_dir]","tx_id":"281474976775658","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","detailed_status":"StatusAccepted","operation":"MODIFY ACL","component":"schemeshard","acl_add":"[+(ConnDB):subject:-]"}
{"@timestamp":"2023-03-13T20:07:30.927210Z","@log_type":"audit","reason":"Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)","paths":"[/my_dir/db1/some_dir]","tx_id":"844424930216970","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","detailed_status":"StatusAlreadyExists","operation":"CREATE DIRECTORY","component":"schemeshard"}
{"@timestamp":"2025-11-03T18:07:39.056211Z","@log_type":"audit","begin_tx":1,"commit_tx":1,"component":"grpc-proxy","database":"/my_dir/db1","detailed_status":"SUCCESS","end_time":"2025-11-03T18:07:39.056204Z","grpc_method":"Ydb.Query.V1.QueryService/ExecuteQuery","operation":"ExecuteQueryRequest","query_text":"SELECT * FROM `my_row_table`;","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","start_time":"2025-11-03T18:07:39.054863Z","status":"SUCCESS","subject":"serviceaccount@as","sanitized_token":"xxxxxxxx.**"}
{"@timestamp":"2025-11-03T17:41:44.203214Z","@log_type":"audit","component":"monitoring","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","operation":"HTTP REQUEST","method":"POST","url":"/viewer/query","params":"base64=false&schema=multipart","body":"{\"query\":\"SELECT * FROM `my_row_table`;\",\"database\":\"/local\",\"action\":\"execute-query\",\"syntax\":\"yql_v1\"}","status":"IN-PROCESS","reason":"Execute"}
The JSON envelope template {"audit": %message%, "source": "ydb-audit-log"} produces entries like:
{"audit":"2023-03-14T10:41:36.485788Z: {\"paths\":\"[/my_dir/db1/some_dir]\",\"tx_id\":\"281474976775658\",\"database\":\"/my_dir/db1\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx\",\"status\":\"SUCCESS\",\"subject\":\"{none}\",\"detailed_status\":\"StatusAccepted\",\"operation\":\"MODIFY ACL\",\"component\":\"schemeshard\",\"acl_add\":\"[+(ConnDB):subject:-]\"}\n","source":"ydb-audit-log"}
{"audit":"2023-03-13T20:07:30.927210Z: {\"reason\":\"Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)\",\"paths\":\"[/my_dir/db1/some_dir]\",\"tx_id\":\"844424930216970\",\"database\":\"/my_dir/db1\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx\",\"status\":\"SUCCESS\",\"subject\":\"{none}\",\"detailed_status\":\"StatusAlreadyExists\",\"operation\":\"CREATE DIRECTORY\",\"component\":\"schemeshard\"}\n","source":"ydb-audit-log"}
{"audit":"2025-11-03T18:07:39.056211Z: {\"@log_type\":\"audit\",\"begin_tx\":1,\"commit_tx\":1,\"component\":\"grpc-proxy\",\"database\":\"/my_dir/db1\",\"detailed_status\":\"SUCCESS\",\"end_time\":\"2025-11-03T18:07:39.056204Z\",\"grpc_method\":\"Ydb.Query.V1.QueryService/ExecuteQuery\",\"operation\":\"ExecuteQueryRequest\",\"query_text\":\"SELECT * FROM `my_row_table`;\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]\",\"sanitized_token\":\"xxxxxxxx.**\",\"start_time\":\"2025-11-03T18:07:39.054863Z\",\"status\":\"SUCCESS\",\"subject\":\"serviceaccount@as\"}\n","source":"ydb-audit-log"}
{"audit":"2025-11-03T17:41:44.203214Z: {\"component\":\"monitoring\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]\",\"operation\":\"HTTP REQUEST\",\"method\":\"POST\",\"url\":\"/viewer/query\",\"params\":\"base64=false&schema=multipart\",\"body\":\"{\\\"query\\\":\\\"SELECT * FROM `my_row_table`;\\\",\\\"database\\\":\\\"/local\\\",\\\"action\\\":\\\"execute-query\\\",\\\"syntax\\\":\\\"yql_v1\\\"}\",\"status\":\"IN-PROCESS\",\"reason\":\"Execute\"}\n","source":"ydb-audit-log"}
The same audit log entry formatted for readability:
{
"paths": "[/my_dir/db1/some_dir]",
"tx_id": "281474976775658",
"database": "/my_dir/db1",
"remote_address": "ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx",
"status": "SUCCESS",
"subject": "{none}",
"detailed_status": "StatusAccepted",
"operation": "MODIFY ACL",
"component": "schemeshard",
"acl_add": "[+(ConnDB):subject:-]"
}