我在 sql 服务器的 table 级别限制了 select 访问。但是用户能够访问在其之上创建的视图 table

I have restricted select access at table level in sql server. But users are able to access views which are created top of that table

我在 table 级别限制了 select 对 1 个 table 'A' sql 服务器 (2016) 的访问权限。 但是用户可以访问在 table 'A'.

之上创建的视图

当用户 运行 select statement on table 'A'(select * from table 'A')users are获取“select 对象 table 'A' 的权限被拒绝”消息。 当用户 运行 select statement on view (select * from view 'A') 用户能够访问所有数据。

用户可以通过在 table 'A' 上编写 select 语句来创建新视图。

如何限制用户也可以从视图中访问 table 'A'。

这是所有权链导致的预期行为。只要视图和 table 具有相同的所有者 (AUTHORIZATION),就不会检查视图引用的 table 的权限。

要打破所有权链,您可以将 table 移动到不同的架构(由与视图架构不同的用户拥有)或更改为 table 的所有者。示例如下。

--move table to different schema
CREATE USER RestricedTablesOwner WITHOUT LOGIN;
GO
CREATE SCHEMA RestricedTables AUTHORIZATION RestricedTablesOwner;
GO
ALTER SCHEMA RestricedTables TRANSFER dbo.A;
GO

--change table to different owner, retaining same schema
ALTER AUTHORIZATION ON OBJECT::dbo.A TO RestricedTablesOwner;