我无法访问任何数据库图表

MyD*_*ons 6 sql-server sql-server-2017

我的数据库在我的 Windows Server 2016 标准上运行良好。数据库管理系统为 Microsoft SQL Server 2017 Express。

今天我添加了一个新的表格和内容,一切都很好。我尝试打开数据库图并收到错误消息:

在此处输入图片说明

如果图像不起作用,消息是:

无法作为数据库主体执行,因为权限“dbo”不存在,无法模拟此类主体,或者您没有权限。(Microsoft SQL Server,错误:15517)

我的服务器上没有任何变化 - 没有更新等。

我可以访问所有表。当我查看我登录的帐户时,我可以看到我是数据库所有者,其他帖子建议这样做 - 但我以前并不确定为什么这会有所帮助。

这个问题会影响我拥有的每个数据库。

唯一的区别是我现在使用以下脚本从计划任务创建每日备份

BACKUP DATABASE DBName TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup\DBName .bak' 
WITH NOFORMAT, INIT,  NAME = N'DBName Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
Run Code Online (Sandbox Code Playgroud)

的结果

SELECT ORIGINAL_LOGIN(), USER_NAME(), SUSER_SNAME();
Run Code Online (Sandbox Code Playgroud)

显示

在此处输入图片说明

Rac*_*SQL 8

这是因为数据库的所有者(登录名)已被删除。您应该将数据库的所有者重新映射到存在的登录名。

ALTER AUTHORIZATION 
ON DATABASE::[DatabaseName]
TO [A Suitable Login];
Run Code Online (Sandbox Code Playgroud)

不要使用sp_changedbowner. 这是一个已弃用的功能。

  • @MyDaftQuestions 没有必要删除任何内容。可能是这个数据库是从另一台服务器恢复的,所有者 sid 在这里根本不存在。数据库的所有者是什么帐户?`SELECT p.name, p.type_desc FROM sys.databases AS d LEFT OUTER JOIN sys.server_principals AS p ON d.owner_sid = p.sid WHERE d.name = N'name';` - 如果返回 `NULL`将数据库的授权更改为`sa`。如果它不返回`NULL`,那么该帐户可能被劫持了。 (2认同)