加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在proc中使用sp_executesql时出现“select permissio

发布时间:2020-12-16 06:56:56 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Sql Server 2008并且有一个在内部使用sp_executesql的proc.通过ASP.NET执行proc时,我一直收到以下错误: 对象’MyTable’,数据库’MyDatabase‘,架构’dbo’上的SELECT权限被拒绝. 我已经对此做了大量研究,大多数人都指出我需要在动态查询读取的基
我正在使用Sql Server 2008并且有一个在内部使用sp_executesql的proc.通过ASP.NET执行proc时,我一直收到以下错误:

对象’MyTable’,数据库’MyDatabase‘,架构’dbo’上的SELECT权限被拒绝.

我已经对此做了大量研究,大多数人都指出我需要在动态查询读取的基础表上授予select权限.好吧,我已经完成了这个,它似乎仍然无法正常工作:

select object_name(major_id) as object,user_name(grantee_principal_id) as grantee,user_name(grantor_principal_id) as grantor,permission_name,state_desc
from sys.database_permissions
where major_id = object_id('User') and 
class = 1
Results:
MyTable public  dbo SELECT  GRANT
MyTable guest   dbo SELECT  GRANT
MyTable myuser  dbo SELECT  GRANT
MyTable NT AUTHORITYNETWORK SERVICE    dbo SELECT  GRANT

正如你所看到的,我试图在基础表上授予select,这已经过度了.我甚至重新编写了我的proc,以便它只在动态sql中引用MyTable.我甚至已经授予所有上述用户“proc”执行权限…没有运气.

上面的“myuser”是web.config中我的connectionstring中的用户名.

我在这里错过了什么吗?

谢谢!
戴夫

解决方法

我想到了.将此发布给遇到此问题的其他任何人.

1)首先,我注意到我的dbo用户没有与之关联的登录名.您可以通过右键单击dbo用户的Security / Users文件夹中的dbo用户并单击Properties来查看.在灰色区域中,您应该是用户名(dbo)和登录名(sa).我认为这通常发生在您还原数据库或某些事情时(不确定).无论如何,如果您没有看到登录名,只需在数据库中运行该问题:

sp_changedbowner’sa’

这只是使dbo成为数据库的所有者(或类似的东西).我发现这个的原因是因为我尝试通过这个gui接口保存一些权限,例如“db_datareader”,“db_datawriter”,但是抛出了一个错误,说明需要登录名.我认为dbo应该检查db_owner(我的确如此),我认为无论如何这都胜过其他所有人.

2)为了让我的proc工作,我必须在proc结束时添加“with execute as owner”.我以前试过这个,但是因为我的第一个问题#1而认为它不起作用. Proc通常在proc的所有者下运行,但在procs中不是动态sql.它们在用户执行proc的上下文中运行.对我来说这很奇怪,因为我认为我需要在动态sql(我试过)中添加它,但它需要在proc本身(去图?)

3)运行此脚本也可能不会受到影响:

将’MyTable’上的选择授予’MyUser’

对于动态sql中使用的每个表.

希望这可以帮助…

这里有一些对同一问题的引用:

http://www.jimmcleod.net/blog/index.php/2007/05/15/sp_executesql-breaks-chain-of-ownership-in-sql-server-2000/

http://kbalertz.com/301299/Security-Context-Dynamic-Statements-Inside-Stored-Procedure.aspx

http://www.mssqltips.com/tipprint.asp?tip=1822

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读