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
来验证这一点。
我有一个 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
来验证这一点。