diff --git a/CHANGELOG.md b/CHANGELOG.md
index b471eb85751c890db916a9892ccda4e6a54706ee..26c920edf9d0d5688e7c0bacbe945da161f47c80 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,7 +29,7 @@ with the `YY.0M.MICRO` scheme.
   console communication occurs in plain text and always operates under the admin account.
 
 - Restrict the number of login attempts through `picodata connect`. The limit can be set
-  through `max_login_attempts` property. The default value is `5`.
+  through `max_login_attempts` property. The default value is `4`.
 
 - _Clusterwide SQL_ now available via `\set language sql` in interactive console.
 
diff --git a/src/storage.rs b/src/storage.rs
index 6330ce6237c4663bb1080961c78781b291c7a4f5..a9d313b6133a16976410aad2e5976e244a78d56c 100644
--- a/src/storage.rs
+++ b/src/storage.rs
@@ -1201,7 +1201,7 @@ pub const DEFAULT_AUTO_OFFLINE_TIMEOUT: f64 = 5.0;
 pub const DEFAULT_MAX_HEARTBEAT_PERIOD: f64 = 5.0;
 pub const DEFAULT_SNAPSHOT_CHUNK_MAX_SIZE: usize = 16 * 1024 * 1024;
 pub const DEFAULT_SNAPSHOT_READ_VIEW_CLOSE_TIMEOUT: f64 = (24 * 3600) as _;
-pub const DEFAULT_MAX_LOGIN_ATTEMPTS: usize = 5;
+pub const DEFAULT_MAX_LOGIN_ATTEMPTS: usize = 4;
 
 impl Properties {
     pub fn new() -> tarantool::Result<Self> {
diff --git a/test/int/test_acl.py b/test/int/test_acl.py
index 503b8f55dfab271bc37570a10b2912567c102614..3c80452266411dd14bc0ab784f1ad05e32f5bf11 100644
--- a/test/int/test_acl.py
+++ b/test/int/test_acl.py
@@ -5,7 +5,7 @@ from tarantool.connection import Connection  # type: ignore
 
 VALID_PASSWORD = "long enough"
 PASSWORD_MIN_LENGTH_KEY = "password_min_length"
-MAX_LOGIN_ATTEMPTS = 5
+MAX_LOGIN_ATTEMPTS = 4
 
 
 def expected_min_password_violation_error(min_length: int):