[SQL Server]关于15517号错误的一点想法

本文介绍了解决SQL Server中15517号错误的方法,此错误发生在使用带有WITH EXECUTE AS选项的存储过程时。文章详细解释了错误产生的原因及如何通过更改数据库所有者来解决这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将一个数据库分离,然后在另一台电脑上附加,可能会出现这样的情况:在使用有限权限的用户执行一些存储过程的时候会出现15517号错误:无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。

引发这种错误的存储过程都有一个WITH EXECUTE AS选项,指定了OWNER或者别的用户(登录名)。

例如,我在自己的电脑上用Windows身份验证登录,创建了一个数据库,并在数据库中创建了一个带有WITH EXECUTE AS OWNER选项的存储过程。然后分离这个数据库,在别人的电脑上附加,此时如果运行这个存储过程,就会引发上面提到的错误。

造成这个错误的原因是WITH EXECUTE AS选项指定的用户(登录名)在当前的服务器中不存在。当我用Windows身份验证登录服务器并创建一个数据库时,这个数据库的所有者就是我所使用的Windows账户,在本机执行存储过程时,SQL Server会找到这个用户并以它的身份来执行存储过程。然而,当把数据库附加到另一台电脑上时,那台电脑的系统上并没有我电脑上这个账户,在执行存储过程时找不到该用户,所以引发了错误。

要解决这个错误,可以修改数据库的所有者,例如执行以下命令:

 

ALTER AUTHORIZATION ON DATABASE::[<Database's Name] TO [sa]

就把指定数据库的所有者改为sa。sa在所有的SQL Server服务器中都存在,所以不会出现上述错误。

转载于:https://www.cnblogs.com/zplutor/archive/2009/08/07/1541528.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值