SQL Server 数据库缺少 INFORMATION_SCHEMA 和 sys 用户

问题描述 投票:0回答:2

我有一个数据库,已从生产网站恢复到我的环境中以进行开发。原来的数据库是SQL Server 2016,我的开发环境原来也是2016。我使用 Red Gate SQL Compare/Data Compare 将其迁移到 2014 年,以实现跨环境的最大兼容性。

在恢复的 SQL Server 2016 和 2014 环境中,都列出了两个用户,但有一个图标指示他们丢失(其上有红色 X)。

如果我运行查询来列出数据库中的所有用户,它们确实似乎丢失了。示例查询如下。

select suser_sname(owner_sid) as 'Owner', state_desc, * 
from sys.databases 
order by [name]

select * 
from master.sys.server_principals  
order by [name]

有问题的两个用户帐户是

INFORMATION_SCHEMA
sys
。根据下面的 MS 文档,这些似乎是内置用户帐户。

https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/principals-database-engine?view=sql-server-2017#informationschema-and-sys-users-和模式

为什么恢复数据库后这些账户会丢失?

我需要添加它们吗?如果是,我该如何安全地做到这一点?根据下面文档中提供的步骤,它们不会被列为孤立帐户。

https://learn.microsoft.com/en-us/sql/sql-server/failover-clusters/troubleshoot-orphaned-users-sql-server?view=sql-server-2017

不重新创建这些用户帐户有什么风险?

sql sql-server database relational-database database-administration
2个回答
1
投票

SSMS 对象资源管理器中用户图标的红色 X 表示用户没有数据库的

CONNECT
权限。这是
sys
INFORMATION_SCHEMA
数据库主体的预期,因为它们仅用于具有相同名称的相应模式的所有权。

您问题中的查询返回服务器级主体,因此不会返回这些未映射到登录名的数据库用户。当您查询

sid
时,您将看到这些用户的
NULL
sys.database_principals

所以底线是这是正常的(无论是否恢复数据库),因此不需要采取任何措施。


0
投票

尝试:

 use <restored database name>;
 
 exec sp_change_users_login 'report';

列出恢复到新服务器后从(服务器)用户中孤立的所有(数据库)用户。有关此存储过程的信息可以在这里找到:

sp_change_users_login (Transact-SQL)

然后您可以使用:

exec sp_change_users_login 'Auto_Fix', 'missinglogin'

要重新链接已存在同名服务器用户的数据库, 或

exec sp_change_users_login 'Auto_Fix', 'missinglogin', null, 'C!$#$!$#@!@!@#%^&^&@!'

在服务器级别重新创建并提供新密码,例如“C!$#$!$#@!@!@#%^&^&@!”。

注意一旦完成,您可能必须

  • 修改服务器用户的密码过期和复杂性设置
  • 对其他恢复的数据库执行相同的操作
© www.soinside.com 2019 - 2024. All rights reserved.