반응형
마스터 데이터베이스에 기록된 데이터베이스 소유자 SID가 데이터베이스 소유자 SID와 다릅니다.
기존 데이터베이스에 tSQLt를 설치하려고 하면 다음 오류가 나타납니다.
마스터 데이터베이스에 기록된 데이터베이스 소유자 SID가 데이터베이스 '에 기록된 데이터베이스 소유자 SID와 다릅니다.ALTER Authorization 문을 사용하여 데이터베이스 "의 소유자를 리셋하여 이 상황을 수정해야 합니다.
이 문제는 백업에서 복원된 데이터베이스와 데이터베이스 소유자의 SID가 마스터 데이터베이스에 나열된 소유자 SID와 일치하지 않을 때 발생할 수 있습니다.다음은 오류 메시지에서 권장되는 "ALTER AUTHORITION" 문을 사용하는 솔루션입니다.
DECLARE @Command VARCHAR(MAX) = 'ALTER AUTHORIZATION ON DATABASE::[<<DatabaseName>>] TO
[<<LoginName>>]'
SELECT @Command = REPLACE(REPLACE(@Command
, '<<DatabaseName>>', SD.Name)
, '<<LoginName>>', SL.Name)
FROM master..sysdatabases SD
JOIN master..syslogins SL ON SD.SID = SL.SID
WHERE SD.Name = DB_NAME()
PRINT @Command
EXEC(@Command)
이것을 tSQLt.class의 맨 위에 추가했습니다.sql 스크립트
declare @user varchar(50)
SELECT @user = quotename(SL.Name)
FROM master..sysdatabases SD inner join master..syslogins SL
on SD.SID = SL.SID
Where SD.Name = DB_NAME()
exec('exec sp_changedbowner ' + @user)
다음 스크립트를 데이터베이스에 적용하면 오류가 발생합니다.
EXEC sp_changedbowner 'sa'
ALTER DATABASE [database_name] SET TRUSTWORTHY ON
DB 소유자를 변경하는 가장 간단한 방법은 다음과 같습니다.
EXEC SP_ChangeDBOwner 'sa'
네크로마닝:
SQL-Server 2000 뷰(사용되지 않음)를 사용하지 않으려면 다음을 사용하십시오.
-- Restore sid when db restored from backup...
DECLARE @Command NVARCHAR(MAX)
SET @Command = N'ALTER AUTHORIZATION ON DATABASE::<<DatabaseName>> TO <<LoginName>>'
SELECT @Command = REPLACE
(
REPLACE(@Command, N'<<DatabaseName>>', QUOTENAME(SD.Name))
, N'<<LoginName>>'
,
QUOTENAME
(
COALESCE
(
SL.name
,(SELECT TOP 1 name FROM sys.server_principals WHERE type_desc = 'SQL_LOGIN' AND is_disabled = 'false' ORDER BY principal_id ASC )
)
)
)
FROM sys.databases AS SD
LEFT JOIN sys.server_principals AS SL
ON SL.SID = SD.owner_sid
WHERE SD.Name = DB_NAME()
PRINT @command
EXECUTE(@command)
GO
또, 이상한 이름의 데이터베이스 또는 유저의 버그를 방지해, 유저가 관련지어져 있지 않은 경우의 버그를 수정합니다(sa 로그인을 사용).
언급URL : https://stackoverflow.com/questions/12389656/the-database-owner-sid-recorded-in-the-master-database-differs-from-the-database
반응형
'programing' 카테고리의 다른 글
id 대신 instancetype을 사용하는 것이 좋을까요? (0) | 2023.04.19 |
---|---|
Windows 배치 파일: .bat vs .cmd? (0) | 2023.04.19 |
bash 스크립트에 타임스탬프 변수 생성 (0) | 2023.04.19 |
"shallow" 복사 사전을 업데이트하면 "original" 사전이 업데이트되지 않는 이유는 무엇입니까? (0) | 2023.04.19 |
Postgre에 작은 따옴표로 텍스트를 삽입합니다.SQL (0) | 2023.04.19 |