SQL Server 2008 - обновление системного каталога из хранимой процедуры - PullRequest
0 голосов
/ 28 июля 2011

У нас были некоторые старые хранимые процедуры в SQL Server 2000, которые обновляли системный каталог из приложения, которое использовалось для обеспечения безопасности пользовательского приложения, привязанного к ролям SQL Server, чтобы использовать преимущества встроенной безопасности SQL Server и логинов NT.

Когда мы переносим БД в SQL Server 2008 и пытаемся запустить эту хранимую процедуру, мы получаем ошибку SQL Server 2008

Специальные обновления системных каталогов не допускаются.

Я искал и обнаружил, что начиная с SQL Server 2005 и далее MS не поддерживает обновления каталога (кроме случаев использования выделенного подключения администратора (DAC)).

Если кто-нибудь может помочь мне с тем, как сделать это в новых версиях или любой другой альтернативе (например, .Net код, запускаемый на сервере Sql ??), это будет здорово.

Некоторые примеры запросов ниже

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 ]

1 голос
/ 29 июля 2011

Нет обычной причины для обновления системных таблиц в SQL Server.Когда-либо.

Существует целый массив команд и системных хранимых процедур для правильного выполнения этого во всех версиях SQL Server.

Вы все равно не можете, как вы заметили: нет взлома илиобойти

0 голосов
/ 26 июля 2013

Обновление системной таблицы может быть опасной задачей , так как это может привести к неожиданным результатам.Поэтому, прежде чем сделать это, просто убедитесь, что вы очень уверены в том, что вы делаете.Рекомендуется внести изменения в реплику исходной базы данных, чтобы предотвратить нежелательные результаты или сбои в базе данных.

Возможные варианты:

  1. Используйте ЦАП .Вы можете получить технику после поиска в Google.Это больше взлом системных таблиц.

  2. Используйте следующий код:

sp_configure 'allow updates', 1 go

// ваш код

перенастроить с переопределением go

перенастроить настроит обратно вашу базу данных.установка ' разрешить обновления ' в '1' позволит вам обновлять системные таблицы.

Но лучшим способом будет найти другую альтернативу для вашей задачи.!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...