使用单独架构上的视图时,“对象的 SELECT 权限被拒绝”

Dom*_*etz 4 sql-server nhibernate schema sql-server-2005

注意:这是一个社区维基条目,主要用于记录问题及其解决方案。我几乎无法在网上找到信息来解决这个问题。希望它可以帮助某人!


我有一个 SQL-Server 2005 DB,数据表在dbo架构上。对于项目中的一个新组件,我创建了一个新的数据访问层(使用 NHibernate),为了很好地封装它,我创建了一个新模式。

对于我需要的所有对象,我创建了一个视图:

myschema.ViewTable1 myschema.ViewTable2 等,并授予选择权限。

现在,当我尝试访问这些视图时,该用户仅对视图具有选择权限,而对 NHibernate 的基础表没有选择权限,我得到了:

The SELECT permission was denied on the object 'dbo.Table1', database 'TestDB', schema 'dbo'.

根据所有文档,这应该是可能的。更奇怪的是,SQL 确实在 Management Studio 中作为普通选择执行了工作。但是如果我exec sp_executesql像 NHibernate 那样执行它,它会因相同的异常而中断。

经过长时间的搜索,我终于在 StackOverflow 上找到了这个问题。添加的更新提供了线索:

我的新架构myschema归我的 Windows 用户所有,而不是由dbo 拥有

在将架构所有者更改为dbo并重新创建所有myschema对象(是的,这是必需的!)之后,事情开始按预期工作!

希望这可以帮助某人。

Dom*_*etz 5

解决方案:

确保您的架构由相同的角色拥有!