6

我已经完成了大部分工作,但某处似乎存在权限问题:

在还原之前,我的目标环境中的一切工作正常 - 目标有一个服务器登录帐户 TCMDBUser,该帐户映射到我的 tridion_cm 数据库用户 TCMDBUser

我的源 tridion_cm 数据库有用户 TCMDBUser_DEV。

将源 .bak 还原到我的目标后,TCMDBUser_DEV 是孤立的。

我编辑 TRUSTEES 表以更正目标环境的 MTSUser 和我的管理员日志帐户,并运行以下命令来修复我的孤立数据库用户:

sp_change_users_login @Action='update_one', 
@UserNamePattern='TCMDBUser_DEV', 
@LoginName='TCMDBUser'
GO

我可以重新登录到 Tridion 资源管理器并查看预期的出版物列表,并且可以浏览树结构,但是当我来到一个应该包含项目的文件夹时,我看不到任何错误:

对应的事件日志错误为:

Unable to get list of SDL Tridion Content Manager items.
DESCRIPTION

Error Code:
0x80040000 (-2147221504)

Call stack:
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String)
System.Data.SqlClient.SqlDataReader.GetOrdinal(String)
System.Data.SqlClient.SqlDataReader.get_Item(String)
Tridion.ContentManager.Data.AdoNet.DatabaseUtilities.ConvertToFieldDictionary(IDataRecord,IDictionary`2)
Tridion.ContentManager.Data.AdoNet.IdentifiableObjectDataMapper.Read(TcmUri,IDataRecord,IDictionary`2)
Tridion.ContentManager.Data.AdoNet.ContentManagement.OrganizationalItemDataMapper.GetListItemsPost(IDataReader,TcmUri,OrganizationalItemItemsFilterData)
Tridion.ContentManager.Data.AdoNet.ContentManagement.OrganizationalItemDataMapper.Tridion.ContentManager.Data.ContentManagement.IOrganizationalItemDataMapper.GetListItems(TcmUri,OrganizationalItemItemsFilterData)
Tridion.ContentManager.ContentManagement.OrganizationalItem.GetListItemsData(OrganizationalItemItemsFilter)
Tridion.ContentManager.ContentManagement.OrganizationalItem.GetListItemsStream(OrganizationalItemItemsFilter)
Tridion.ContentManager.BLFacade.ContentManagement.OrganizationalItemFacade.GetListItemsXml(UserContext,String,ListFilter,ListColumnFilter)
Tridion.ContentManager.BLFacade.ContentManagement.OrganizationalItemFacade.GetListData(UserContext,String,EnumListKind,ListColumnFilter,String)
Folder.GetListItems
4

3 回答 3

5

您需要从数据库中删除/删除 TCMDBUser_DEV,然后创建一个具有相同名称和密码的新数据库(或将其重新附加到您的 cm 数据库)。那应该可以解决您的问题。

我通常在 MS SQL 服务器上使用删除方法。我相信这是由于 TCMDBUser 在数据库架构上的所有权状态而发生的。

完成后,您的 TCMDBUser 用户应该对您的 Tridion_CM 数据库具有以下权限

在此处输入图像描述

于 2012-11-21T00:16:17.217 回答
4

就像克里斯提到的那样,我总是从数据库中删除用户,然后将 SQL Server 中现有的 TCMDBUser 分配给恢复的数据库的权限。您可以使用以下命令删除用户(在恢复的数据库上):

EXEC sp_dropuser TCMDBUser

然后通过 SQL Server - Security - Logins,请求 TCMDBUser 的属性,并在 User Mapping 中添加以下数据库角色db_datareaderdb_datawriterdb_ddladmin

这就是我过去一直在做的并且对我有用,不确定它是否都是必需的,但我想值得一试

于 2012-11-21T11:03:00.513 回答
2

尝试在数据库中创建新用户 TCMDBUser 并运行以下命令

EXEC sp_change_users_login 'Update_One', 'TCMDBUser', 'TCMDBUser'
于 2012-11-21T05:45:04.873 回答