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

问题描述

我需要限制对Firebird 3.0中的表的SELECT访问,以便用户不能读取所有列。

FAQ entry建议创建一个具有受限列的视图,然后仅对此视图授予SELECT权限。但是,如果我这样做并使用FlameRobin与受限用户连接并尝试从视图中进行选择,则错误消息表明我没有从基础表中进行选择的SELECT权限。但是,如果我授予对该表的访问权限,则可以读取所有列...

如何只授予对限制视图的SELECT访问权限,而不授予整个基础表的SELECT访问权限?

解决方法

由于您不希望用户在表上进行授予,因此应该具有VIEW(或通过SP来限制用户权限时可以选择存储过程)。用户“调用” VIEW(或SP),然后VIEW调用表。

GRANT SELECT ON mytable TO VIEW myview

您必须授予表对视图而不是用户的读取权限。阅读章节 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特权。

在这种情况下,您不希望用户有权访问基础表,因此需要向视图授予必要的特权:

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

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