我們在SQL Server 2000中有一些舊的存儲過程,它從一個用於用戶應用程序安全性的應用程序更新系統目錄,該用戶應用程序安全性綁定到SQL Server角色以利用SQL Server內置安全和NT登錄。SQL Server 2008 - 從存儲過程更新系統目錄
當我們遷移數據庫到SQL Server 2008,並嘗試運行這些存儲過程,我們得到SQL Server 2008中的錯誤
特設更新系統目錄是不允許的。
我四處搜索,發現從SQL Server 2005開始,MS不支持目錄更新(除非使用專用管理員連接(DAC))。
如果任何人都可以幫助我如何在新版本或任何其他選擇(如在Sql服務器運行的.Net代碼??),這將是偉大的。
下面
update sysusers
set roles = convert(varbinary(2048), substring(convert(binary(2048), roles), 1, @ruidbyte-1)
+ convert(binary(1), ([email protected]) & substring(convert(binary(2048), roles), @ruidbyte, 1))
+ substring(convert(binary(2048), roles), @ruidbyte+1, [email protected])),
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)
基本上,那些系統目錄**視圖**(在SQL Server 2005/2008及更高版本中)就是這樣 - 只讀視圖導入系統表。這些系統表不能用普通代碼編輯 - 既不是T-SQL也不是SQL-CLR。您需要使用「官方」,已發佈的API(例如「CREATE USER」或「DROP USER」)來執行此類操作 - 當您這樣做時,系統目錄視圖將自動更新 –
與@marc_s同意 - 請使用記錄和支持的方法安全。 –