error: no permission for select access to view

error: no permission for select access to view

我有一个 Firebird 3 数据库。我创建了一个新用户 NATO。然后我创建了一个新角色 Cash。在数据库表上,此角色具有权限。包含这些表的查询工作正常,但是当我从这些表创建视图 (v_goods) 时,它没有权限并且出现错误:

no permission for select access to view v_goods.

CREATE USER NATO;
CREATE ROLE CASH;
GRANT CASH TO NATO;
GRANT SELECT ON TABLE V_GOODS TO CASH; 

 Connection1.DriverName :='FB';
 Connection1.Params.Add('port=3050');
 Connection1.Params.Add('protocol=TCPIP');
 Connection1.Params.Add('CharacterSet=UTF8');
 Connection1.Params.Add('Server= SERVER-EDEL');
 Connection1.Params.Add('Database=D:\DirectDll\Base_TMG.fdb');
 Connection1.Params.Add('User_name=NATO');
 Connection1.Params.Add('Password=***');
 Connection1.Params.Add('sql_role_name=Cash'); //+USER_Role);
 Connection1.Connected := True;

 v_Goods.Connection:=Connection1;
 v_Goods.Open;

如果我授予特殊用户查看权限PUBLIC

GRANT SELECT ON TABLE V_GOODS TO CASH

然后视图工作正常,但在这种情况下,每个经过身份验证的用户(具有或不具有此角色)都可以打开视图。如果我撤销用户 PUBLIC 的权限,则会出现此错误。

根据 FireDAC documentation,角色的适当 属性 是 RoleName,而不是 sql_role_name。因此,您目前可能没有指定角色。

您可以通过在 Delphi 应用程序中执行 select CURRENT_ROLE from RDB$DATABASE 来验证这一点。