2012-11-20 117 views
6

我有大部分的方式的不同实例,但似乎有一个权限问题的地方:还原数据库到的tridion

恢复谈判之前我在目标环境中工作正常 - 目标有一个服务器登录这被映射到我的tridion_cm数据库用户TCMDBUser

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

将源.bak恢复到我的目标TCMDBUser_DEV是孤立的。

我编辑受托人表纠正MTSUser和我的管理日志占我的目标环境,运行下面的来解决我的孤立的数据库用户:

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

我可以重新登录,外表套上探险,看看出版物的预期列表,并可以通过树状结构走路,但是当我到了一个文件夹,它包含的项目我什么也看不到,出现错误:

和相应的事件日志错误是:

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 
+1

你确定你恢复的数据库是完全相同的版本作为SDL Tridion CM服务器,你也连接它?两台数据库服务器的排序规则设置是否匹配? –

+0

你是如何得出这是一个权限错误的结论?我在调用堆栈中的任何地方都没有看到任何访问检查... –

+2

@BartKoopman你已经正确地将头钉在头上 - 我刚刚确认我的源Tridion实例不是服务包装,但我的目标是。当我对数据库运行升级工具时,重新启动错误消失。启发!感谢和遗憾的错误 –

回答

4

像克里斯提到,我总是从数据库中删除用户,然后为SQL Server中现有的TCMDBUser分配恢复的数据库的权限。你可以滴用以下命令的用户(在还原的数据库上):

EXEC sp_dropuser TCMDBUser 

然后通过SQL Server - 安全 - 登录,您要求您TCMDBUser的性质,并在用户映射添加下面的数据库角色:db_datareaderdb_datawriter和​​。

这就是我一直在过去所做的,如果它的所有必需的工作对我来说,不知道,但值得一试我猜

+0

我从头开始并执行以下操作:i)针对恢复的分区运行EXEC sp_dropuser TCMDBUser_DEV。 ii)按建议编辑现有登录TCMDBUser的用户映射iii)重新启动Tridion服务 - 结果相同:在TCM Explorer –

+0

中,文件夹中没有项目是否可以在您的问题中添加更多关于实际错误消息的详细信息?还要检查Tridion事件日志中是否存在该错误及其详细信息 –

+0

我似乎有某种访问方式,因为我可以看到并浏览我期望看到并浏览文件夹结构组的所有出版物。但是当我选择一个我期望有物品的文件夹时,我会看到零个项目。事件日志错误添加到帖子顶部。 –

5

您需要从DB中删除/删除TCMDBUser_DEV,然后使用相同的名称和密码创建一个新的(或将其重新附加到cm DB)。这应该能解决你的问题。

我通常使用MS SQL服务器的删除方法。我相信这是由TCMDBUser对数据库架构拥有的所有权状态造成的。

完成后您的TCMDBUser用户必须在自己的Tridion_CM数据库具有以下权限

enter image description here

+0

很抱歉让用户和登录混淆。我的目标SQL实例有一个登录TCMDBUser,我想继续作为我的用户访问(保留MMC管理单元设置),我恢复的数据库有一个孤立的用户TCMDBUser_DEV。请你可以列出需要T-SQL的步骤吗? –

+0

我添加了上面的权限的屏幕快照,可能有所帮助 –

+0

谢谢。是的,这是它的外观。 (我正在重新启动服务器以确保正确的涟漪通过) –

2

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

EXEC sp_change_users_login 'Update_One', 'TCMDBUser', 'TCMDBUser' 
+0

您的意思是新用户对tridion_cm或新登录?我从零开始恢复,并针对tridion_cm创建了一个新用户TCMDBUser,然后运行建议的脚本。登录到Tridion Admin的结果与以前相同。当然,我想保留与TCMDBUser_DEV结合的权限,并将其绑定到登录用户(这是我的原始帖子)? –

+0

我的意思是用户...尝试用任何adnin用户先登录.. –

+0

我按照你的建议做了 - 根据tridion_cm创建了一个新用户TCMDBUser并与现有的登录TCMDBUser相关联。你是什​​么意思首先与管理员用户登录?你能否详细说明从数据库恢复所需的步骤? –