diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index 308d1842d41a65cb8a842d85be82e77cc6fed368..c58956bf670736f8f74edf68eecf30ddf1aae6f2 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -1372,24 +1372,30 @@ box.schema.user.drop = function(name, opts)
     return drop(uid, opts)
 end
 
+local function info(id)
+    local _priv = box.space._priv
+    local _user = box.space._priv
+    local privs = {}
+    for _, v in pairs(_priv:select{id}) do
+        table.insert(
+            privs,
+            {privilege_name(v[5]), v[3], object_name(v[3], v[4])}
+        )
+    end
+    return privs
+end
+
 box.schema.user.info = function(user_name)
     local uid
     if user_name == nil then
         uid = box.session.uid()
     else
-        uid = user_or_role_resolve(user_name)
+        uid = user_resolve(user_name)
         if uid == nil then
             box.error(box.error.NO_SUCH_USER, user_name)
         end
     end
-    local _priv = box.space._priv
-    local _user = box.space._priv
-    local privs = {}
-    for _, v in pairs(_priv:select{uid}) do
-        table.insert(privs,
-                     {privilege_name(v[5]), v[3], object_name(v[3], v[4])})
-    end
-    return privs
+    return info(uid)
 end
 
 box.schema.role = {}
@@ -1442,7 +1448,13 @@ box.schema.role.revoke = function(user_name, ...)
     end
     return revoke(uid, user_name, ...)
 end
-box.schema.role.info = box.schema.user.info
+box.schema.role.info = function(role_name)
+    local rid = role_resolve(role_name)
+    if rid == nil then
+        box.error(box.error.NO_SUCH_ROLE, role_name)
+    end
+    return info(rid)
+end
 
 --
 -- once
diff --git a/test/box/role.result b/test/box/role.result
index 22ca8e0e2f3b891356707024bde6f4d452f949d1..d4e8fe935f4fff2ecbc0505e092a32245a42c89f 100644
--- a/test/box/role.result
+++ b/test/box/role.result
@@ -896,3 +896,42 @@ box.schema.role.info('X1')
 ---
 - []
 ...
+-- gh-867 inconsistent role/user info
+box.schema.role.create('test_role')
+---
+...
+box.schema.role.info('test_role')
+---
+- []
+...
+box.schema.user.info('test_role')
+---
+- error: User 'test_role' is not found
+...
+box.schema.role.info('test_not_exist')
+---
+- error: Role 'test_not_exist' is not found
+...
+box.schema.user.create('test_user')
+---
+...
+box.schema.user.info('test_user')
+---
+- - - execute
+    - role
+    - public
+...
+box.schema.role.info('test_user')
+---
+- error: Role 'test_user' is not found
+...
+box.schema.user.info('test_not_exist')
+---
+- error: User 'test_not_exist' is not found
+...
+box.schema.role.drop('test_role')
+---
+...
+box.schema.user.drop('test_user')
+---
+...
diff --git a/test/box/role.test.lua b/test/box/role.test.lua
index 86cc146c8923d00f4b4b86b35c4160ad97afa0a1..48441774152cce6dfc7af356dacb3925eeb66c48 100644
--- a/test/box/role.test.lua
+++ b/test/box/role.test.lua
@@ -352,3 +352,17 @@ box.schema.role.grant('X1','read','role','X2')
 box.schema.role.info('X1')
 box.schema.role.revoke('X1','read','role','X2')
 box.schema.role.info('X1')
+
+-- gh-867 inconsistent role/user info
+box.schema.role.create('test_role')
+box.schema.role.info('test_role')
+box.schema.user.info('test_role')
+box.schema.role.info('test_not_exist')
+
+box.schema.user.create('test_user')
+box.schema.user.info('test_user')
+box.schema.role.info('test_user')
+box.schema.user.info('test_not_exist')
+
+box.schema.role.drop('test_role')
+box.schema.user.drop('test_user')