如何授予用户仅执行 Tarantool 中的特定功能
How to grant a user to perform only a certain function in Tarantool
现在的挑战是:有2个函数。并且有一个用户只能执行其中一个。问题是怎么做?
如果你只是写:box.schema.user.grant ('user', 'execute', 'function', 'dima', nil, {if_not_exists = true}) 那么用户'user' 根本无法连接。显示一条错误消息:用户 'user' 拒绝执行对 universe '' 的访问。如何正确提供访问权限?
box.once("schema", function()
box.schema.user.create('superuser', {password = '11111111'})
box.schema.user.create('user', {password = '11111111'})
box.schema.user.grant('superuser', 'read,write,execute','universe', nil, {if_not_exists = true})
box.schema.user.grant('user','execute','function','dima',nil, {if_not_exists = true})
end)
function reload(proc)
package.loaded[proc]=nil return require(proc)
end
ws = reload('project/init')
函数维度:
local obj={}
function obj.open()
return 'dima'
end
return obj
函数 dima2:
local obj={}
function obj.open()
return 'dima2'
end
return obj
Init.lua:
obj = {}
collectgarbage('collect')
net = require('net.box')
fiber = require('fiber')
uuid = require('uuid')
-- modules
obj.dima = reload('project/dima')
obj.dima2 = reload('project/dima2')
return obj
为了只允许访问一项功能,您可以执行以下操作:
box.cfg({listen=3301})
foo = function() print("bar") end
box.schema.user.create('myuser', {if_not_exists=true, password = 'secret'})
-- setuid is required here so that the function, when called by user with
-- restricted rights, will have access to everything
box.schema.func.create('foo', {if_not_exists=true, setuid=true})
box.schema.user.grant('myuser', 'execute', 'function',
'foo', {if_not_exists=true})
然后打开一个单独的 tarantool 提示符(不是 tarantoolctl!下面的解释)并键入:
net_box = require('net.box')
c = net_box.connect('myuser:secret@localhost:3301')
c:call('foo')
然后您会在第一个控制台中看到“bar”。
您看到“用户 'user' 拒绝执行对 universe 的访问”的原因是您尝试使用 tarantoolctl 连接,这需要对整个数据库的读取权限。通过连接器或 net.box.
调用时会很好
现在的挑战是:有2个函数。并且有一个用户只能执行其中一个。问题是怎么做? 如果你只是写:box.schema.user.grant ('user', 'execute', 'function', 'dima', nil, {if_not_exists = true}) 那么用户'user' 根本无法连接。显示一条错误消息:用户 'user' 拒绝执行对 universe '' 的访问。如何正确提供访问权限?
box.once("schema", function()
box.schema.user.create('superuser', {password = '11111111'})
box.schema.user.create('user', {password = '11111111'})
box.schema.user.grant('superuser', 'read,write,execute','universe', nil, {if_not_exists = true})
box.schema.user.grant('user','execute','function','dima',nil, {if_not_exists = true})
end)
function reload(proc)
package.loaded[proc]=nil return require(proc)
end
ws = reload('project/init')
函数维度:
local obj={}
function obj.open()
return 'dima'
end
return obj
函数 dima2:
local obj={}
function obj.open()
return 'dima2'
end
return obj
Init.lua:
obj = {}
collectgarbage('collect')
net = require('net.box')
fiber = require('fiber')
uuid = require('uuid')
-- modules
obj.dima = reload('project/dima')
obj.dima2 = reload('project/dima2')
return obj
为了只允许访问一项功能,您可以执行以下操作:
box.cfg({listen=3301})
foo = function() print("bar") end
box.schema.user.create('myuser', {if_not_exists=true, password = 'secret'})
-- setuid is required here so that the function, when called by user with
-- restricted rights, will have access to everything
box.schema.func.create('foo', {if_not_exists=true, setuid=true})
box.schema.user.grant('myuser', 'execute', 'function',
'foo', {if_not_exists=true})
然后打开一个单独的 tarantool 提示符(不是 tarantoolctl!下面的解释)并键入:
net_box = require('net.box')
c = net_box.connect('myuser:secret@localhost:3301')
c:call('foo')
然后您会在第一个控制台中看到“bar”。
您看到“用户 'user' 拒绝执行对 universe 的访问”的原因是您尝试使用 tarantoolctl 连接,这需要对整个数据库的读取权限。通过连接器或 net.box.
调用时会很好