我通常不是使用Firebird语言的人,但我必须修复对生成器的访问才能继续工作。在我的脚本中有一行:set generator order_gen to 0
已经不起作用了。
我正在尝试:GRANT USAGE ON GENERATOR ORDER_GEN TO USER MAHE
,但我仍然得到错误...no permission for ALTER access to GENERATOR ORDER_GEN ...
。
我应该授予不同的权限来设置生成器,还是我在这里没有使用正确的语法?
假设Firebird 3.0或更高版本,USAGE
权限仅授予使用NEXT VALUE FOR <sequence>
和GEN_ID(<sequence>, <n>)
的权限。如文件中所述:
对于序列(生成器(,
USAGE
权限仅授予使用CCD_ 8函数或CCD_SET GENERATOR
语句是ALTER SEQUENCE … RESTART WITH …
的同义词,被视为DDL语句依据默认情况下,只有序列的所有者和管理员具有此类操作的权利。设定任何初始值的权利可以使用GRANT ALTER ANY SEQUENCE
授予序列,而不是推荐给普通用户。
如前所述,GRANT ALTER ANY SEQUENCE
应该是最后的手段。根据要解决的实际问题,您还可以调用gen_id(order_gen, 0 - gen_id(order_gen, 0))
(例如select gen_id(order_gen, 0 - gen_id(order_gen, 0)) from rdb$database
((这是一个漏洞/解决方法,另请参阅序列(生成器(的ALTER和USAGE权限之间的不一致性(。在火鸟问题跟踪器中(。
或者,您应该要求数据库管理员执行此脚本/语句,或者——如果您自己拥有RDB$ADMIN权限——确保在连接到数据库时指定该角色(如果您没有明确指定该角色,则不会获得管理员权限(。