사용자`dbo`와 sys.databases에 저장된 데이터베이스 소유자의 차이점은 무엇입니까?


11

최근 dbo데이터베이스 의 사용자가 in sid과 일치하지 않는 질문이 제기 owner_sid되었습니다 sys.databases. 데이터베이스 소유자가 역할 멤버와 어떻게 다른지 이해 db_owner하지만 항상 사용자 dbo가 데이터베이스의 실제 소유자 라고 생각했습니다 . 그렇지 않습니까? 그리고 만약에 dbo무엇이에 무엇이 다른가 sys.databases?

답변:


8

나는 항상 사용자 dbo가 데이터베이스의 실제 소유자 라고 생각했습니다 .

그것은 정확하다 (적어도 정확해야한다). 해당 사용자의 이름 "dbo"는 변경되지 않지만 기본 SID는 누가 데이터베이스를 만들 었는지 또는 sp_changedbowner (SQL Server 2005 포함) 또는 ALTER AUTHORIZATION (SQL로 시작 )을 통해 설정된 사람에 따라 달라집니다 서버 2008).

이 세 가지 경우 모두 레코드 sys.databases가 동기화되도록 동기화 된 레코드 도 변경됩니다. 그러나 다른 시스템 또는 동일한 인스턴스에서 데이터베이스를 복원 할 때 소유자를 변경하기 위해 두 개의 SQL 명령 중 하나를 실행하기 전에 백업 / 분리 된 DB에서 데이터베이스를 복원 한 후 RESTORE 또는 첨부시 데이터베이스가 복원됩니다. 간의 불일치 수 owner_sid의 열 sys.databases및 "DBO" sidsys.database_principals해당 DB이다.

내가 아는 한, sys.database_principals각 DB 의 레코드 는 실제 소유자이며, 그 owner_sidsys.databases은 레코드 유지 / 편의 (비정규 화와 유사합니다. sys.databases시스템이 없으면 모든 DB에 대해 별도의 쿼리를 수행해야합니다. 요청 될 때마다 그 정보를 얻으십시오!) 보안. 그것이 사용되는 한 가지는 잠재적으로 유해하거나 유효하지 않은 복원 / 연결된 DB를 식별하는 것이 레코드가 일치하지 않는다는 것입니다. 로 표시 액세스 SQLCLR 어셈블리에 시도 중 하나 EXTERNAL_ACCESS또는 UNSAFE하나의 상호 덜 안전한 경로를 이동하기로 선택한 경우로드되지 TRUSTWORTHY는이 중 하나는 A 로그인 일치해야합니다 같은 것과를 "DBO"SID에 의존 EXTERNAL ACCESS ASSEMBLY또는UNSAFE ASSEMBLY허가. 그리고 두 시스템 카탈로그 뷰간에 SID가 일치하지 않으면 어느 것을 사용해야하는지 결정할 수 없으며 잠재적 인 보안 문제가있는 경우 빨간색 플래그로 사용됩니다. 실제로 SQL # 의 설치 스크립트에서이 조건을 테스트하여 누군가에게 적절한 변경을 알리도록 경고합니다. SQL Server가 특정 시점에서 불만을 제기하는 경우 시간을 낭비하지 않아도됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.