我得到以下错误
Cannot execute as the database principal because the principal "dbo"
does not exist, this type of principal cannot be impersonated,
or you do not have permission.
我读过关于ALTER AUTHORIZATION的文章,但我不知道这发生在哪个数据库中。这个错误被频繁地抛出,并且错误日志以每天1GB的速度增长。
我得到以下错误
Cannot execute as the database principal because the principal "dbo"
does not exist, this type of principal cannot be impersonated,
or you do not have permission.
我读过关于ALTER AUTHORIZATION的文章,但我不知道这发生在哪个数据库中。这个错误被频繁地抛出,并且错误日志以每天1GB的速度增长。
当前回答
当意外地将数据库连接字符串提供给只读镜像时也有此错误-而不是HA设置中的主数据库。
其他回答
我通过设置数据库所有者解决了这个问题。在此问题之前,我的数据库没有任何所有者。在数据库中执行此命令将所有者设置为sysadmin帐户:
use [YourDatabaseName] EXEC sp_changedbowner 'sa'
USE [<dbname>]
GO
sp_changedbowner '<user>' -- you can use 'sa' as a quick fix in databases with SQL authentication
KB913423 -在SQL Server 2005中恢复数据库后,不能运行包含EXECUTE AS子句的语句或模块
在我的情况下,我得到这个错误时,试图冒充另一个用户。如。
EXEC AS USER = 'dbo';
由于数据库是从另一个环境导入的,因此它的一些用户与SQL Server登录名不匹配。
您可以通过运行(已弃用的)sp_change_users_login(在“报告”模式下)来检查是否有相同的问题,或使用以下查询:
select p.name,p.sid "sid in DB", (select serp.sid from sys.server_principals serp where serp.name = p.name) "sid in server"
from sys.database_principals p
where p.type in ('G','S','U')
and p.authentication_type = 1
and p.sid not in (select sid from sys.server_principals)
如果在该列表中显示了您试图模拟的用户,那么您可能可以通过将DB用户分配给服务器中的正确登录来修复它。例如:
ALTER USER dbo WITH LOGIN = dbo;
另一种方法
ALTER AUTHORIZATION
ON DATABASE::[DatabaseName]
TO [A Suitable Login];
在Security下,将主体添加为“未登录的SQL用户”,使其拥有与主体同名的模式,然后在Membership中将其设置为db_owner。