在将 Sitecore 数据库从生产环境迁移到非生产环境后,xdbautomationworker 容器出现了无法连接到 SQL Server 的问题。错误日志显示:
System.Data.SqlClient.SqlException (0x80131904): Only active directory users can impersonate other active directory users.
这个错误发生在尝试执行 Sitecore.Xdb.ReferenceData.SqlServer.Commands.GetDefinitionTypeCommand
时。
我们进行了以下调查:
检查数据库所有者:
SELECT name , owner_sid
FROM sys.databases
Non-Prod sys.databases
name | owner_sid |
---|---|
master | 0x01060000000001640000000000000000663E13D3D16A054F8DC5D166B11A8DACB1 |
Sitecore.Marketingautomation | 0x16293186C9E12A4AA335B2F899274756777 |
Prod sys.databases
name | owner_sid |
---|---|
master | 0x01060000000001640000000000000000F38C7FCC4B939A43A85755A91FB7E8E718 |
Sitecore.Xdb.Collection.ShardMapManager | 0x01060000000001640000000000000000F38C7FCC4B939A43A85755A91FB7E8E718 |
Non-Prod sys.database_principals
name | principal_id | type | type_desc | default_schema_name | owning_principal_id | sid |
---|---|---|---|---|---|---|
dbo | 1 | S | SQL_USER | dbo | NULL | 0x01 |
youradmin | 5 | S | SQL_USER | dbo | NULL | 0x01060000000001640000000000000000663E13D3D16A054F8DC5D166B11A8DACB1 |
问题的根源是数据库所有权不一致。我们通过以下步骤解决了这个问题:
ALTER AUTHORIZATION ON DATABASE::[Sitecore.Marketingautomation] TO [admin_login];
ALTER AUTHORIZATION ON DATABASE::[Sitecore.Messaging] TO [admin_login];
ALTER AUTHORIZATION ON DATABASE::[Sitecore.Referencedata] TO [admin_login];
将 [admin_login] 替换为实际的管理员登录名。
USE [DatabaseName];
SELECT name, type_desc, default_schema_name
FROM sys.database_principals
WHERE type IN ('S', 'U') AND name NOT IN ('dbo', 'guest', 'INFORMATION_SCHEMA', 'sys');
USE [Sitecore.Marketingautomation];
ALTER ROLE db_owner ADD MEMBER [mauser];
USE [Sitecore.Messaging];
ALTER ROLE db_owner ADD MEMBER [messaginguser];
USE [Sitecore.Referencedata];
ALTER ROLE db_owner ADD MEMBER [refdatauser];
USE [master];
SELECT name, type_desc, is_disabled
FROM sys.server_principals
WHERE type IN ('S', 'U') AND name NOT LIKE '##%';
这个问题突显了在迁移 Sitecore 数据库时,确保正确转移数据库所有权的重要性。不一致的数据库所有权可能导致权限问题,特别是当存储过程使用 EXECUTE AS OWNER 子句时。
在进行数据库迁移时,建议:
通过遵循这些步骤,我们成功解决了 xdbautomationworker 容器的连接问题,恢复了 Sitecore 环境的正常运行。
还没有人评论,抢个沙发吧...