注意:这是一个社区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
个对象(是,这是必需的!),事情开始按预期工作!
希望这有助于某人。
答案 0 :(得分:4)
解决方案:
确保您的架构归同一个角色所有!