数据库用户A应该只能访问特定数据。此数据当前由视图B.VIEW1提供,该视图从模式B和C拥有的表中进行选择。
CREATE VIEW [B].[VIEW1] AS SELECT * FROM [B].[VIEW2], [C].[VIEW1]
由于C.VIEW1不属于B,因此所有权链适用。
这意味着尽管A被授予B.VIEW1上的SELECT权限,但它无法从中进行选择。
SELECT permission denied on object 'C.VIEW1', database '...', schema '...'.
在安全性方面,带有EXECUTE AS OWNER 子句的存储过程B.PROC1是B.VIEW1的有效替代品吗?
CREATE PROC [B.PROC1] WITH EXECUTE AS OWNER AS BEGIN SELECT * FROM [B.VIEW2], [C].[VIEW1] END
或者是否有任何可能导致任何安全问题的负面副作用?