diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua
index 17a980992b6a3e87d5ab2398a6606974fc51331f..f0b610f43da045038825cb05b39fa48bf960a57c 100644
--- a/src/box/lua/schema.lua
+++ b/src/box/lua/schema.lua
@@ -79,7 +79,7 @@ local function role_resolve(name_or_id)
     local tuple
     if type(name_or_id) == 'string' then
         tuple = _user.index.name:get{name_or_id}
-    else
+    elseif type(name_or_id) ~= 'nil' then
         tuple = _user:get{name_or_id}
     end
     if tuple == nil or tuple[4] ~= 'role' then
@@ -94,7 +94,7 @@ local function user_resolve(name_or_id)
     local tuple
     if type(name_or_id) == 'string' then
         tuple = _user.index.name:get{name_or_id}
-    else
+    elseif type(name_or_id) ~= 'nil' then
         tuple = _user:get{name_or_id}
     end
     if tuple == nil or tuple[4] ~= 'user' then
@@ -1003,10 +1003,10 @@ end
 
 function box.schema.func.exists(name_or_id)
     local _func = box.space[box.schema.FUNC_ID]
-    local tuple 
+    local tuple = nil
     if type(name_or_id) == 'string' then
         tuple = _func.index.name:get{name_or_id}
-    else
+    elseif type(name_or_id) == 'number' then
         tuple = _func:get{name_or_id}
     end
     return tuple ~= nil
diff --git a/test/box/access.result b/test/box/access.result
index 6ba4f59a0b572eceb6fc23d006753c7e574a0b0f..917f425539c452859f265f7d39cabbd50909dae7 100644
--- a/test/box/access.result
+++ b/test/box/access.result
@@ -475,6 +475,10 @@ box.schema.user.exists('guest')
 ---
 - true
 ...
+box.schema.user.exists(nil)
+---
+- false
+...
 box.schema.user.exists(0)
 ---
 - true
@@ -520,6 +524,14 @@ box.schema.func.exists('box.schema.user.info')
 ---
 - true
 ...
+box.schema.func.exists()
+---
+- false
+...
+box.schema.func.exists(nil)
+---
+- false
+...
 -- gh-665: user.exists() should nto be true for roles
 box.schema.user.exists('public')
 ---
@@ -529,6 +541,10 @@ box.schema.role.exists('public')
 ---
 - true
 ...
+box.schema.role.exists(nil)
+---
+- false
+...
 -- test if_exists/if_not_exists in grant/revoke
 box.schema.user.grant('guest', 'read,write,execute', 'universe')
 ---
diff --git a/test/box/access.test.lua b/test/box/access.test.lua
index 41fe522ed98f820a6d133c7ed708cb8fc7527935..9c3a5400a8ec027fac4b0586c2f2e036b90588e6 100644
--- a/test/box/access.test.lua
+++ b/test/box/access.test.lua
@@ -197,6 +197,7 @@ box.schema.user.drop('twostep_client')
 -- 
 -- box.schema.user.exists()
 box.schema.user.exists('guest')
+box.schema.user.exists(nil)
 box.schema.user.exists(0)
 box.schema.user.exists(1)
 box.schema.user.exists(100500)
@@ -209,9 +210,12 @@ box.schema.func.exists('guest')
 box.schema.func.exists(1)
 box.schema.func.exists(2)
 box.schema.func.exists('box.schema.user.info')
+box.schema.func.exists()
+box.schema.func.exists(nil)
 -- gh-665: user.exists() should nto be true for roles
 box.schema.user.exists('public')
 box.schema.role.exists('public')
+box.schema.role.exists(nil)
 -- test if_exists/if_not_exists in grant/revoke
 box.schema.user.grant('guest', 'read,write,execute', 'universe')
 box.schema.user.grant('guest', 'read,write,execute', 'universe')