diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index a4a62510d170242e4c0f57d6193ab3e5fff0e978..0a38b7ac3ec4681eb37edb69f53af7f9b742eca7 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -708,7 +708,9 @@ box.schema.user.passwd = function(new_password)
     local _user = box.space[box.schema.USER_ID]
     auth_mech_list = {}
     auth_mech_list["chap-sha1"] = box.schema.user.password(new_password)
-    _user:update({uid}, {"=", 4, auth_mech_list})
+    require('session').su('admin')
+    _user:update({uid}, {{"=", 4, auth_mech_list}})
+    require('session').su(uid)
 end
 
 box.schema.user.create = function(name, opts)
diff --git a/test/box/access.test.lua b/test/box/access.test.lua
index 6c37bcda335ea0cfa613fb8c27636401833dcd10..ab4fb95fae3a634fcb937b6984ffed85d73c0fe4 100644
--- a/test/box/access.test.lua
+++ b/test/box/access.test.lua
@@ -134,4 +134,13 @@ session.su('guest')
 box.space._user:select{0}
 box.space._user:select{1}
 session.su('admin')
+-- ----------------------------------------------------------
+-- A test case for gh-358 Change user does not work from lua
+-- Correct the update syntax in schema.lua
+-- ----------------------------------------------------------
+box.schema.user.create('user1')
+session.su('user1')
+box.schema.user.passwd('new_password')
+session.su('admin')
+box.schema.user.drop('user1')
 session = nil