如何在 Firebird 的限制视图上授予用户 SELECT

How to grant a user SELECT on a restricting view in Firebird

我需要限制 SELECT 访问 Firebird 3.0 中的 table,这样用户就无法读取所有列。

FAQ entry 建议创建一个包含受限列的视图,然后仅在该视图上授予 SELECT。但是,如果我这样做并使用 FlameRobin 与受限用户连接并尝试从视图中访问 select,则该错误表明我没有 SELECT 从底层 [=] 访问 select 的权利24=]。但是如果我授予访问权限 table,所有列都可以读取...

如何才能仅授予 SELECT 对限制性视图的访问权限,而不是对整个底层 table 的访问权限?

既然您不希望您的用户在 table 上获得授权,那么 VIEW 应该具有(或选择 table 存储过程,当用户权限由 SP 监管)。用户“调用”VIEW(或 SP),然后 VIEW 调用 table.

GRANT SELECT ON mytable TO VIEW myview

您必须授予 table 视图的读取权限,而不是用户。阅读第 11.2.2 章。 https://firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-security-auth-manage-users

处的 Firebird 文档中授予权限的声明

为了能够从视图中 select,您需要向用户授予视图的 SELECT 权限,但是,为了能够从视图中 select ,用户或视图必须对该视图中使用的 table(s) 具有 SELECT 权限。

在这种情况下,您不希望用户访问底层 table,因此您需要授予视图必要的权限:

GRANT SELECT ON TABLE <sourcetable> TO VIEW <yourview>

另请参阅 Firebird 2.5 语言参考中的 Statements for Granting Privileges