use*_*073 11 sql-server sql-server-2008-r2
我已经恢复了一个数据库并创建了一个新用户(与我登录的用户相同)作为 db_owner。现在,当我想查看数据库图表时出现错误
无法安装数据库关系图支持对象,因为此数据库没有有效的所有者。要继续,首先使用“数据库属性”对话框的文件页面或“更改授权”语句将数据库所有者设置为有效登录名,然后添加数据库支持对象
现在,当我尝试从数据库属性的文件页面更改所有权时,我收到错误消息
为数据库 'ABC' 设置所有者失败。(Microsoft.SqlServer.SMO) 附加信息:SMO 中发生异常 提议的新数据库所有者 James-PC\James 在此数据库中映射为用户 James。参数名称:James-PC\James"
请帮我解决这个问题,以便我可以在从另一个系统恢复数据库备份后在这台计算机上看到数据库图表。
数据库所有者是 sys.server_principals 中拥有该数据库的登录名,由其 SID 定义。在恢复之后,很容易出现用于恢复数据库的登录名不是数据库以前所有者的登录名。(如果在服务器之间移动数据库,则更有可能发生这种情况。)
因此,您可能会遇到三种设置问题
数据库 owner_sid 不等于数据库的 db_owner sid。您可以通过以下方式将其与数据库 ABC 进行比较:
SELECT owner_sid FROM sys.databases where name = 'ABC';
SELECT sid from ABC.sys.database_principals WHERE name = 'dbo';
接下来,您将收到一条消息,指出您提议的数据库 owner_sid 也作为 sys.database_principals 中的用户存在。我们从有关映射提议所有者的错误消息中了解到这一点。
所以你的步骤是:
USE ABC;
DROP USER James;
ALTER AUTHORIZATION ON DATABASE::ABC TO [James-PC\James];
Run Code Online (Sandbox Code Playgroud)
您删除了不需要的用户,因为您将其设为 dbo。一旦这样,那么您的登录名就可以成为数据库的所有者。
编辑:您还可以使用 SSMS 从 ABC 数据库中删除 James 用户。然后您可以返回到数据库属性文件选项卡来设置数据库所有者。(对不起,我倾向于认为脚本。)
| 归档时间: |
|
| 查看次数: |
29705 次 |
| 最近记录: |