我们在SQL Server 2000中有一些旧的存储过程,它从用于用户应用程序安全性的应用程序更新系统目录,该应用程序与SQL Server角色绑定,以利用SQL Server内置安全性和NT登录。
当我们将数据库迁移到SQL Server 2008并尝试运行这些存储过程时,我们会收到SQL Server 2008错误
不允许对系统目录进行临时更新。
我四处搜索,发现从SQL Server 2005开始,MS不支持目录更新(除非使用专用管理员连接(DAC))。
如果有人可以帮助我在新版本或任何其他替代方案(例如在Sql server中运行的.Net代码?)中如何执行此操作,那将非常棒。
下面的一些示例查询
update sysusers
set roles = convert(varbinary(2048), substring(convert(binary(2048), roles), 1, @ruidbyte-1)
+ convert(binary(1), (~@ruidbit) & substring(convert(binary(2048), roles), @ruidbyte, 1))
+ substring(convert(binary(2048), roles), @ruidbyte+1, 2048-@ruidbyte)),
updatedate = getdate()
where uid = @memuid
delete from syspermissions where grantee = @uid
delete from sysusers where uid = @uid
insert into sysusers
values(@uid, 0, @rolename, NULL, 0x00, getdate(), getdate(), @owner, NULL)
答案 0 :(得分:1)
在SQL Server中更新系统表没有常规原因。如初。
有一整套命令和系统存储过程可以在所有版本的SQL Server中正确执行。
你无论如何都不能指出:没有黑客或解决方法
答案 1 :(得分:0)
更新系统表可能是危险任务,因为它可能会导致意外结果。因此,在您这样做之前,请确保您对自己所做的事情非常有信心。建议您对原始数据库的副本进行更改,以防止数据库中出现不需要的结果或崩溃。
可能的方法是:
使用 DAC 。您可以在谷歌搜索后获得该技术。它更像是破解系统表。
使用以下代码:
sp_configure'allow updates',1 去
//你的代码
使用覆盖重新配置 去
reconfigure会配置回数据库。 将“允许更新”设置为“1”将允许您更新系统表。
但最好的办法是为你的任务寻找另一种选择。!