sql-server — SID владельца базы данных, записанный в базе данных master, отличается от SID владельца базы данных" />

SID владельца базы данных, записанный в базе данных master, отличается от SID владельца базы данных

Когда я пытаюсь установить tSQLt в существующую базу данных, я получаю следующую ошибку:

  

SID владельца базы данных, записанный в базе данных master, отличается от   SID владельца базы данных, записанный в базе данных ''. Вы должны исправить   эта ситуация путем сброса владельца базы данных с помощью ALTER   Авторизация.

66 голосов | спросил JDPeckham 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 17:45:52 +0400 2012, 17:45:52

6 ответов


0

Эта проблема может возникать, когда база данных восстанавливается из резервной копии и SID владельца базы данных не совпадает с SID владельца, указанным в основной базе данных. Вот решение, которое использует инструкцию «ALTER AUTHORIZATION», рекомендованную в сообщении об ошибке:

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)
ответил JohnnyM 1 42012vEurope/Moscow11bEurope/MoscowThu, 01 Nov 2012 04:32:47 +0400 2012, 04:32:47
0

Добавил это в начало скрипта 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)
ответил JDPeckham 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 12 Sep 2012 17:45:52 +0400 2012, 17:45:52
0

Примените приведенный ниже скрипт к базе данных, вы получите ошибку:

EXEC sp_changedbowner 'sa'

ALTER DATABASE [database_name] SET TRUSTWORTHY ON 
ответил NarendraMishra 31 Maypm16 2016, 12:28:47
0

Necromaning:
Если вы не хотите использовать представления 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).

ответил Stefan Steiger 22 Jpm1000000pmThu, 22 Jan 2015 14:58:16 +030015 2015, 14:58:16
0

Я также столкнулся с этой проблемой и обнаружил, что владелец целевой базы данных не существует в основной базе данных. Сопоставление этого пользователя с основной базой данных решило проблему для меня.

ответил Rolan 24 MonEurope/Moscow2018-12-24T22:52:42+03:00Europe/Moscow12bEurope/MoscowMon, 24 Dec 2018 22:52:42 +0300 2018, 22:52:42
0

Если вы хотите импортировать новый clr, если вы получили это сообщение об ошибке, просто установите Sa в качестве владельца для вашей базы данных, как показано ниже, так что должно работать

Изменить авторизацию для базы данных :: [] на [sa]

ответил Hamid 17 J0000006Europe/Moscow 2016, 01:42:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132