Firebird DB 中没有执行访问过程的权限

问题描述 投票:0回答:1

我遵循了手册中的规格:

  1. 我创建了一个角色:
    CREATE ROLE reader;
  2. 用户已创建:
    CREATE USER voron PASSWORD 'somepassword'
  3. 然后为了授予权限,我执行了以下操作:
GRANT SELECT ON exportit TO PROCEDURE sp_get_itexport_tags;
GRANT EXECUTE ON PROCEDURE TO ROLE reader;
GRANT reader TO USER voron;

我还尝试向

PUBLIC
用户“授予”,但它给了我以下错误:
no permission to EXECUTE access to PROCEDURE sp_get_itexport_tags. Effective user is VORON
。我将这些权限授予为
SYSDBA
。使用角色
reader
和用户密码登录。怎么了?

stored-procedures firebird
1个回答
0
投票

我无法重现(使用 ISQL):

create database 'e:\db\fb4\check_rights.fdb' user sysdba;
create role reader;
set term #;
create procedure test_1 as begin end#
set term ;#
grant execute on procedure test_1 to role reader;
grant reader to user voron;
commit;

然后没有角色:

connect 'e:\db\fb4\check_rights.fdb' user voron;
execute procedure test_1;

这将(如预期)导致错误:

Statement failed, SQLSTATE = 28000
no permission for EXECUTE access to PROCEDURE TEST_1
-Effective user is VORON

有了角色,程序执行得很好:

connect 'e:\db\fb4\check_rights.fdb' user voron role reader;
execute procedure test_1;

这不会报告任何错误(该过程没有执行任何有用的操作,因此没有输出)。

我的猜测是您没有指定角色,或者您在双引号中指定了角色,因此它区分大小写(在这种情况下,

select CURRENT_ROLE from RDB$DATABASE
报告
NONE
)。或者,您没有提交您的授予语句,或者,因为您缺少问题中显示的授予中的过程名称,您收到了一个被忽略的错误,并且没有授予实际的权限。

© www.soinside.com 2019 - 2024. All rights reserved.