在处理单独模式上的视图时,“对象上的SELECT权限被拒绝”

时间:2010-01-15 12:08:12

标签: sql-server sql-server-2005 nhibernate schema

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


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

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

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上找到了this的问题。 添加的更新提供了线索:

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

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

希望这有助于某人。

1 个答案:

答案 0 :(得分:4)

解决方案:

确保您的架构归同一个角色所有!