我在sql server中限制了表级别的选择访问.但用户可以访问在该表顶部创建的视图



对于sql server(2016(中的1个单表"A",我在表级别限制了选择访问。但用户可以访问在表"A"顶部创建的视图。

当用户对表"A"运行select语句(从表"A"中选择*(时,用户将收到"拒绝对对象表"A"的选择权限"消息。当用户在视图上运行select语句(从视图"A"中选择*(时,用户可以访问所有数据。

用户可以通过在表"A"上写入select语句来创建新视图。

如何限制用户从视图访问表"A"。

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

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

--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;

最新更新