SQL Server 2008 - 从存储过程更新系统目录

时间:2011-07-28 19:28:00

标签: sql-server-2008

我们在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)

2 个答案:

答案 0 :(得分:1)

在SQL Server中更新系统表没有常规原因。如初。

有一整套命令和系统存储过程可以在所有版本的SQL Server中正确执行。

你无论如何都不能指出:没有黑客或解决方法

答案 1 :(得分:0)

更新系统表可能是危险任务,因为它可能会导致意外结果。因此,在您这样做之前,请确保您对自己所做的事情非常有信心。建议您对原始数据库的副本进行更改,以防止数据库中出现不需要的结果或崩溃。

可能的方法是:

  1. 使用 DAC 。您可以在谷歌搜索后获得该技术。它更像是破解系统表。

  2. 使用以下代码:

  3. sp_configure'allow updates',1 去

    //你的代码

    使用覆盖重新配置 去

    reconfigure会配置回数据库。 将“允许更新”设置为“1”将允许您更新系统表。

    但最好的办法是为你的任务寻找另一种选择。!