数据库用户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 Clause的存储过程B.PROC1是否可以有效替代B.VIEW1?
CREATE PROC [B.PROC1] WITH EXECUTE AS OWNER AS BEGIN SELECT * FROM [B.VIEW2], [C].[VIEW1] END
还是说会有任何负面影响,可能会导致安全问题?