2007年10月30日 星期二 16:23

对象名 'dnt_templates' 无效解决方法:

--解决重装系统并还原论坛数据库后,数据库帐号不关联的问题。
--注意请用sa帐号 进行如下操作
--操作之前,确保当前SqlServer中存在和原来数据库所有者同名的帐号

Exec sp_configure 'allow updates',1 --允许更新系统表。
RECONFIGURE WITH OVERRIDE
DECLARE @DBName varchar(50),@UserName varchar(50),@Sql varchar(200)
set @DBName='原数据库名'
set @UserName='原数据库帐号'
set @Sql=N'update'+@DBName +N'.dbo.sysusers set sid = (select sid from master.dbo.syslogins where name='+quotename(@UserName,'''')+N') where name='+quotename(@UserName,'''')
exec(@Sql)
Exec sp_configure 'allow updates',0 --关闭系统表更新
RECONFIGURE WITH OVERRIDE
/***************************************************/
--例如 您原来数据库被还原后 名为 dntbbs , 该数据库原来的数据库所有者为bill


如上法不行,请试用下面的方法:

我有自己的服务器,我将SQLServer数据库备份后,我重新安装了SQLServer并将备份数据库还原,但论坛运行后提示表不存在。


Discuz!NT SQLServer版的用户可能会遇到这个问题, 下面就详细的解释下问题的原因和解决办法。

例如:新建数据库discuz,新建一个用户user1,指定user1对数据库discuz有权限,然后安装Discuz!NT SQLServer版,Discuz!NT的安装程序自动为用户创建表,此时discuz中的表的所有者就是user1,这样的好处是不需要user1用户拥有任何sqlserver权限身份,安全性高(有的用户用sa或其它管理员帐号来运行论坛,本地测试当然是无所谓,但如果是在服务器上这么做,一旦被恶意利用,可能就要威胁到所有数据库甚至整个服务器的系统!还有一些程序没有安装程序,只是提供SQL脚本让用户创建表,很多用户就用管理员帐号来创建了表,那时表的所有者为dbo,因此一般不出现该问题)。后来备份数据库并重新安装SQLServer,再将备份的数据库还原,discuz数据库的所有者还是user1,但user1不存在,你新指定的用户user2可能也无法再操作discuz数据库。虽然你看到表并没有缺少,但user2却无权访问到它们,因此可能会提示表不存在。

解决这个问题的办法很简单:假设你的数据库叫discuz,原来的所有者是用户user1,备份还原后你新建立了一个用户user2,遇到上述问题后,以管理员身份进入查询分析器,选择数据库discuz,执行以下SQL命令:

EXEC sp_change_users_login update_one, 'user1', 'user2'

执行完毕后,user2即对discuz数据库拥有权限。另外特别需要提醒的是:当你修改了数据库帐号后,请将论坛dnt.config中的小节里面帐号信息也做相应的修改,然后重新启动IIS里的应用程序池。

posted on 2008-01-08 10:37  偶卖糕的  阅读(1072)  评论(0编辑  收藏  举报