답변:
나는 항상 사용자
dbo
가 데이터베이스의 실제 소유자 라고 생각했습니다 .
그것은 정확하다 (적어도 정확해야한다). 해당 사용자의 이름 "dbo"는 변경되지 않지만 기본 SID는 누가 데이터베이스를 만들 었는지 또는 sp_changedbowner (SQL Server 2005 포함) 또는 ALTER AUTHORIZATION (SQL로 시작 )을 통해 설정된 사람에 따라 달라집니다 서버 2008).
이 세 가지 경우 모두 레코드 sys.databases
가 동기화되도록 동기화 된 레코드 도 변경됩니다. 그러나 다른 시스템 또는 동일한 인스턴스에서 데이터베이스를 복원 할 때 소유자를 변경하기 위해 두 개의 SQL 명령 중 하나를 실행하기 전에 백업 / 분리 된 DB에서 데이터베이스를 복원 한 후 RESTORE 또는 첨부시 데이터베이스가 복원됩니다. 간의 불일치 수 owner_sid
의 열 sys.databases
및 "DBO" sid
에 sys.database_principals
해당 DB이다.
내가 아는 한, sys.database_principals
각 DB 의 레코드 는 실제 소유자이며, 그 owner_sid
열 sys.databases
은 레코드 유지 / 편의 (비정규 화와 유사합니다. sys.databases
시스템이 없으면 모든 DB에 대해 별도의 쿼리를 수행해야합니다. 요청 될 때마다 그 정보를 얻으십시오!) 보안. 그것이 사용되는 한 가지는 잠재적으로 유해하거나 유효하지 않은 복원 / 연결된 DB를 식별하는 것이 레코드가 일치하지 않는다는 것입니다. 로 표시 액세스 SQLCLR 어셈블리에 시도 중 하나 EXTERNAL_ACCESS
또는 UNSAFE
하나의 상호 덜 안전한 경로를 이동하기로 선택한 경우로드되지 TRUSTWORTHY
는이 중 하나는 A 로그인 일치해야합니다 같은 것과를 "DBO"SID에 의존 EXTERNAL ACCESS ASSEMBLY
또는UNSAFE ASSEMBLY
허가. 그리고 두 시스템 카탈로그 뷰간에 SID가 일치하지 않으면 어느 것을 사용해야하는지 결정할 수 없으며 잠재적 인 보안 문제가있는 경우 빨간색 플래그로 사용됩니다. 실제로 SQL # 의 설치 스크립트에서이 조건을 테스트하여 누군가에게 적절한 변경을 알리도록 경고합니다. SQL Server가 특정 시점에서 불만을 제기하는 경우 시간을 낭비하지 않아도됩니다.