【问题标题】:Restoring a database into a different instance of tridion将数据库恢复到 tridion 的不同实例
【发布时间】:2012-11-20 23:07:24
【问题描述】:

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

在还原之前,我的目标环境中一切正常 - 目标有一个服务器登录帐户 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

【问题讨论】:

  • 您确定您恢复的数据库与您正在连接的 SDL Tridion CM 服务器的版本完全相同吗?两个数据库服务器的排序规则设置是否匹配?
  • 您是如何得出这是权限错误的结论的?我在调用堆栈的任何地方都没有看到任何类型的访问检查...
  • @BartKoopman 你一针见血——我刚刚确认我的源 Tridion 实例没有服务打包,但我的目标是。当我对数据库运行升级工具并重新启动时,错误消失了。启发!感谢并为错误感到抱歉

标签: tridion tridion-2011


【解决方案1】:

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

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

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

【讨论】:

  • 很抱歉混淆了用户和登录名。我的目标 SQL 实例有一个登录 TCMDBUser,我想继续使用它作为我的访问用户(保留 MMC 管理单元设置),我恢复的数据库有一个孤立用户 TCMDBUser_DEV。请列出需要 T-SQL 的步骤吗?
  • 我添加了上述权限的屏幕截图,可能会有所帮助
  • 谢谢。是的,这就是它的外观。 (我也在重新启动服务器以确保适当的涟漪效应)
【解决方案2】:

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

EXEC sp_dropuser TCMDBUser

然后通过 SQL Server - 安全 - 登录,请求 TCMDBUser 的属性并在用户映射中添加以下数据库角色:db_datareader、db_datawriter 和 db_ddladmin。

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

【讨论】:

  • 我从头开始做了以下工作:i) 对恢复的数据库运行 EXEC sp_dropuser TCMDBUser_DEV。 ii) 按照建议编辑现有登录 TCMDBUser 的用户映射 iii) 重新启动 Tridion 服务 - 结果是一样的:在 TCM Explorer 中时文件夹中没有项目
  • 您能否在您的问题中添加更多关于实际错误消息的详细信息?还要检查 Tridion 事件日志以了解该错误及其详细信息
  • 我似乎有某种访问权限,因为我可以看到和浏览我希望看到的所有出版物并在文件夹结构组中导航。但是当我选择一个我希望有项目的文件夹时,我看到零项目。事件日志错误添加到帖子顶部。
  • 检查项目和组织项目表的权限。用户应具有读取和写入权限。我在二进制表上看到这个设置错误,但从未见过你的问题。您确定您登录的用户有权查看该文件夹的内容吗?
  • 我以 Tridion 系统管理员身份登录,因此读/写权限不相关。我从 TRUESTEES 表中随机选择了一个 Tridion sys Admin 用户,并将他们的 NAME 字段更改为我的本地用户,该用户在我开始恢复之前作为有效的登录名。另请注意,例如,我可以查看出版物属性。
【解决方案3】:

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

EXEC sp_change_users_login 'Update_One', 'TCMDBUser', 'TCMDBUser'

【讨论】:

  • 你的意思是新用户反对 tridion_cm 还是新登录?我从头开始恢复并针对 tridion_cm 创建了一个新用户 TCMDBUser,然后运行了建议的脚本。登录到 Tridion Admin 会得到与以前相同的结果。当然,我想保留 TCMDBUser_DEV 继承的权限并将其绑定到登录用户(这是我的原始帖子)?
  • 我按照你的建议做了 - 针对 tridion_cm 创建了一个新用户 TCMDBUser 并与现有登录 TCMDBUser 相关联。首先使用管理员用户登录是什么意思?您能否详细说明从 db restore 开始所需的步骤?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多