假设我有下表(在模式“SchemaX”中):
CREATE TABLE [SchemaX].[myTable]...
下面的视图建立在前一个表的基础上,但建立在不同的模式 ('SchemaY) 上:
CREATE VIEW [SchemaY].[myView] AS
SELECT * FROM [SchemaX].[myTable]
WHERE ...
我允许某个用户阅读视图:
GRANT SELECT ON OBJECT::[SchemaY].[myView] TO [myUser]
但他仍然无法阅读它并收到以下错误:
对对象“myView”、架构“SchemaY”的 SELECT 权限被拒绝
如果我将视图放在与表相同的模式中,查询将起作用。
您能否解释为什么当两者都在同一架构上时它可以工作,而当它们在不同的架构上时为什么不能工作?
编辑:原来我的模式有不同的所有者。
发现这篇文章解释了为什么当架构所有者不同时它不起作用: https ://www.itprotoday.com/sql-server/security-through-ownership-chains
也许模式有不同的所有者?看看这个:SQL Server - How to grant SELECT permission on View that access data in schemas from differents owners?
您必须授予他们两者的使用权限。SchemaX 中的表和 SchemaY 中的视图。
如果要按行管理权限,请添加“用户”或“角色”列,然后将此条件添加到CURRENT_USER = table.user的位置。