SQL Server 2008에서 데이터베이스 소유자 변경; 사용된 방법에 따라 CLR 문제가 발생합니까?

SQL Server 2008에서 데이터베이스 소유자 변경; 사용된 방법에 따라 CLR 문제가 발생합니까?

데이터베이스를 연결하고 소유자를 유효한 로그인으로 변경해 보았습니다.

저는 ALTER AUTHORIZATION ON Database::my_db_name TO "sa" 문을 사용했습니다. 데이터베이스 속성에 새 소유자가 'sa'인 것으로 표시되었지만 어셈블리 신뢰 문제와 관련된 무제한 CLR 어셈블리(0x80FC80F1, 0x8013150A)에 대한 권한 오류가 계속 발생했습니다.

대신 다음 문을 사용하여 문제를 해결했습니다. EXEC sp_changedbowner 'sa'; 데이터베이스 소유자를 변경합니다.

제 질문은 데이터베이스 소유자를 변경하는 이 두 가지 방법의 차이점이 무엇입니까? 그것들은 동등합니까? sp_changedbowner가 alter 인증 문이 수행하지 않는 작업을 더/올바른 작업을 수행하고 있는 것이 분명해 보입니다.


관심이 있으신 경우를 대비해 sp_changedbowner로 문제를 해결하기 전에 다음을 시도했습니다.

  • 데이터베이스의 신뢰할 수 있는 속성을 ON으로 설정합니다. 사실 저는 이 일을 몇 번 했습니다. 제한되지 않고 서명되지 않은 사용자 지정 CLR 어셈블리를 실행해야 한다는 것을 알고 있습니다.
  • 소유자가 비어 있었기 때문에 각 CLR 어셈블리의 소유자를 dbo로 변경했지만 분명히 dbo는 이미 소유자였으며 SSMS에서는 항상 비어 있습니다.
  • 각 CLR 어셈블리의 소유자를 다른 것으로 변경하지만 종속 어셈블리가 있는 어셈블리에는 항상 동일한 소유자가 필요한 것처럼 보이기 때문에 작동하지 않습니다. 그러나 제공된 인터페이스를 사용하여 동시에 소유자를 변경하는 것은 불가능합니다.
  • [sa]에 GRANT UNSAFE ASSEMBLY를 호출합니다. 분명히 다른 몇 가지 계정과 함께 해당 기본 제공 계정에 권한을 부여할 수 없습니다. 그 사람들은 이미 허가를 받았어
  • [NT AUTHORITY\NETWORK SERVICE]에 GRANT UNSAFE ASSEMBLY를 호출합니다(어셈블리의 계정 호출 메서드). 오류는 없지만 아무 것도 달성하지 못한 것 같습니다(오류 번호가 변경되었을 수 있나요? 그래도 메시지는 변경되지 않았습니다).
  • ...그리고 아마도 내가 기억할 수 없는 몇 가지 다른 것들이 있을 것입니다.

답변1

귀하의 목록에는 신뢰할 수 있는 데이터베이스 설정이 표시되지 않으므로 귀하가 이 단계를 잊어버린 것으로 가정합니다.

ALTER DATABASE my_db_name SET TRUSTWORTHY ON;

하지만 어쩌면 그렇지 않을 수도 있습니다 ...

이 기사를 통해 확인해보세요:http://support.microsoft.com/kb/918040실제로 ALTER AUTHORIZATION 대신 sp_changedbowner를 사용하는 것이 좋습니다. 그러나 사실은 정확히 동일한 작업을 수행합니다(sp_changedbowner가 내부적으로 ALTER AUTHORIZATION을 호출함). 차이점은 dbo 사용자에 대한 "별칭"도 제거하고(더 이상 사용되지 않는 기능임) 데이터베이스의 검사점을 강제로 적용한다는 것입니다. 그 마지막 조각이 당신이 찾고 있는 것일 수도 있습니다.

답변2

나는 데이터베이스 객체의 소유권을 변경할 수 있다고 ALTER_AUTHORIZATION믿고 있습니다. sp_changedbowner물론 명령 간의 차이점은 ALTER_AUTHORIZATION테이블 소유권과 같은 다른 사항을 변경할 수 있는 반면 sp_changedbowner데이터베이스 소유자만 변경한다는 것입니다.

하지만 귀하가 지적한 동작은 매우 이상하게 들립니다. 복제할 수 있나요?

관련 정보