我遵循了手册中的规格:
CREATE ROLE reader;
。CREATE USER voron PASSWORD 'somepassword'
。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
和用户密码登录。怎么了?
我无法重现(使用 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
)。或者,您没有提交您的授予语句,或者,因为您缺少问题中显示的授予中的过程名称,您收到了一个被忽略的错误,并且没有授予实际的权限。