我在sql server(2016)中限制了1个单表'A'的表级选择访问。但是用户能够访问在该表'A'上面创建的视图。
When users run select statement on table 'A'(select * from table 'A') users are getting 'select permission is denied on object table 'A' ' message.when users run select statement on view (select * from view 'A') users are able to access all data.
用户可以通过在表'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;