diff --git a/src/box/alter.cc b/src/box/alter.cc
index a1785d78e3f46cda41b996e24328c347d585a108..5916372715391ae3a2094b920f1bd6ca28d4f207 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -1212,10 +1212,13 @@ user_def_create_from_tuple(struct user_def *user, struct tuple *tuple)
 	 */
 	if (tuple_field_count(tuple) > AUTH_MECH_LIST) {
 		const char *auth_data = tuple_field(tuple, AUTH_MECH_LIST);
-		if (user->type == SC_ROLE && strlen(auth_data)) {
-			tnt_raise(ClientError, ER_CREATE_ROLE, user->name,
-				  "authentication data can not be set for "
-				  "a role");
+		if (strlen(auth_data)) {
+			if (user->type == SC_ROLE)
+				tnt_raise(ClientError, ER_CREATE_ROLE,
+					  user->name, "authentication "
+					  "data can not be set for a role");
+			if (user->uid == GUEST)
+				tnt_raise(ClientError, ER_GUEST_USER_PASSWORD);
 		}
 		user_def_fill_auth_data(user, auth_data);
 	}
diff --git a/src/box/errcode.h b/src/box/errcode.h
index 29b950a262883db4f38062bba966fec2e13c8cfc..54379d0ec99e1b974a8fe5d1f10b941169ab1803 100644
--- a/src/box/errcode.h
+++ b/src/box/errcode.h
@@ -147,6 +147,7 @@ struct errcode_record {
 	/* 93 */_(ER_MISSING_SNAPSHOT,		2, "Can't find snapshot") \
 	/* 94 */_(ER_CANT_UPDATE_PRIMARY_KEY,	2, "Attempt to modify a tuple field which is part of index %s") \
 	/* 95 */_(ER_UPDATE_INTEGER_OVERFLOW,   2, "Integer overflow when performing '%c' operation on field %u") \
+	/* 96 */_(ER_GUEST_USER_PASSWORD,       2, "Setting password for guest user has no effect") \
 
 /*
  * !IMPORTANT! Please follow instructions at start of the file
diff --git a/test/box/access.result b/test/box/access.result
index 8757a860036652641a5a56f3d1cae004ea07af5e..0e984bf7c31a101d653db9ddf36b66b938c2faac 100644
--- a/test/box/access.result
+++ b/test/box/access.result
@@ -667,3 +667,8 @@ box.schema.func.drop('blah', 'blah')
 ---
 - error: Illegal parameters, options should be a table
 ...
+-- gh-758 attempt to set password for user guest
+box.schema.user.passwd('guest', 'sesame')
+---
+- error: Setting password for guest user has no effect
+...
diff --git a/test/box/access.test.lua b/test/box/access.test.lua
index cb19b135ae1aa08c89a76c081aa0d2120f94ed6e..8d7b0d1658025df57b662b02a5746300a759783a 100644
--- a/test/box/access.test.lua
+++ b/test/box/access.test.lua
@@ -261,3 +261,5 @@ box.schema.user.drop('user', 'blah')
 -- gh-664 roles: accepting bad syntax for create
 box.schema.func.create('func', 'blah')
 box.schema.func.drop('blah', 'blah')
+-- gh-758 attempt to set password for user guest
+box.schema.user.passwd('guest', 'sesame')
diff --git a/test/box/misc.result b/test/box/misc.result
index 0fe4994e168993ed3443eecb01de82a0155ed1ca..dbd9e79c8210eac37cefdf4d6f6297f58ad88bbe 100644
--- a/test/box/misc.result
+++ b/test/box/misc.result
@@ -204,6 +204,7 @@ t;
   - 'box.error.MODIFY_INDEX : 14'
   - 'box.error.PASSWORD_MISMATCH : 47'
   - 'box.error.NO_SUCH_ENGINE : 57'
+  - 'box.error.FIELD_TYPE : 23'
   - 'box.error.ACCESS_DENIED : 42'
   - 'box.error.UPDATE_INTEGER_OVERFLOW : 95'
   - 'box.error.LAST_DROP : 15'
@@ -232,7 +233,7 @@ t;
   - 'box.error.ALTER_SPACE : 12'
   - 'box.error.ACTIVE_TRANSACTION : 79'
   - 'box.error.NO_CONNECTION : 77'
-  - 'box.error.FIELD_TYPE : 23'
+  - 'box.error.GUEST_USER_PASSWORD : 96'
   - 'box.error.INVALID_XLOG_NAME : 75'
   - 'box.error.INVALID_XLOG : 74'
   - 'box.error.REPLICA_MAX : 73'