2011-07-28 2 views
0

SQL Server를 사용하기 위해 SQL Server 역할에 연결된 사용자 응용 프로그램 보안에 사용 된 응용 프로그램의 시스템 카탈로그를 업데이트 한 SQL Server 2000의 일부 저장 프로 시저가있었습니다 내장 보안 및 NT 로그인저장 프로 시저의 시스템 카탈로그 업데이트

우리는 SQL Server 2008로 DB 마이그레이션 우리는 SQL Server 2008의 오류를 시스템 카탈로그에

임시 업데이트를이 저장 프로 시저를 사용할 수 없습니다를 실행하려고하면.

전 검색 한 결과 SQL Server 2005 이후부터는 MS가 카탈로그 업데이트를 지원하지 않는다는 점을 발견했습니다 (DAC (Dedicated Administrator Connection)를 사용하지 않는 한).

누구나 새 버전이나 다른 대안 (SQL Server에서 실행되는 .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) 
+3

기본적으로 시스템 카탈로그 **보기 ** (SQL Server 2005/2008 이상)는 읽기 전용보기로 시스템 테이블에 저장됩니다. 이러한 시스템 테이블은 일반 코드 (T-SQL 또는 SQL-CLR)로 편집 할 수 없습니다.이러한 작업을 수행하기 위해'CREATE USER' 나'DROP USER'와 같은 공개 된 "공식적인"API를 사용할 필요가 있습니다 - 시스템 카탈로그 뷰는 자동으로 업데이트됩니다. –

+0

@marc_s와 동의합니다 - 문서화되고 지원되는 방법을 사용하여 구현하십시오 보안. –

답변

1

아래

일부 샘플 쿼리 SQL Server의 시스템 테이블을 업데이트 할 루틴 이유가 없다. 이제까지.

모든 버전의 SQL Server에서 제대로 수행 할 수있는 명령 및 시스템 저장 프로 시저가 있습니다.

할 수 있습니다하지 어쨌든 당신이 언급 한 바와 같이 : 더 해킹이나 해결 방법

+0

감사합니다. 무엇 피부 = #uid 가의 sysusers에서 삭제 곳이 syspermissions에서 삭제 다음과 같이 몇 가지 equivalemnt 시스템 저장 프로 시저 될 위치의 sysusers에 UID = #uid 삽입 값 (#uid, 0, #rolename, NULL, 0 × 00, getdate(), getdate(), #owner, NULL) –

+0

DROP USER 및 CREATE USER (검색 만). 사용자 삭제 권한도 삭제됨 – gbn

+0

dbo_가 아닌 사용자가 sp_addrolemember의 수정 된 복사본에 안전하게 액세스하고 실행할 수 있도록 허용하는 sp_addrolemember 시스템 저장 프로 시저를 사용하지 않는 이유. SQL 2008에도 이러한 제한 사항이 있습니까? –

0

예기치 않은 결과가 발생할 수 있습니다와 같은 위험한 작업 할 수있는 시스템 테이블을 업데이트가 없습니다. 그러기 전에 당신이하고있는 일에 당신이 확신을 가지고 있는지 확인하십시오. 원하지 않는 결과 나 데이터베이스의 충돌을 방지하기 위해 원본 데이터베이스의 복제본을 변경하는 것이 좋습니다.

가능한 방법이 될 수있다 :

  1. DAC 사용합니다. 당신은 google에 그것을 찾기 후에 기술을 얻을 수있다. 그것은 시스템 테이블을 해킹하는 것 이상입니다.

  2. 다음 코드를 사용하여

sp_configure를 '업데이트를 할 수', 1 가 이동을

// 코드

오버라이드 재구성 가고

재구성을 구성합니다 데이터베이스를 백업하십시오. ''을 '업데이트 허용'으로 설정하면 시스템 테이블을 업데이트 할 수 있습니다.

하지만 가장 좋은 방법은 작업에 대한 또 다른 대안을 찾는 것입니다.