sql-server - the - sql server ver usuarios conectados
El SID del propietario de la base de datos registrado en la base de datos maestra difiere del SID del propietario de la base de datos (5)
Cuando intento instalar tSQLt en una base de datos existente, aparece el siguiente error:
El SID del propietario de la base de datos registrado en la base de datos maestra difiere del SID del propietario de la base de datos registrado en la base de datos ''''. Debe corregir esta situación restableciendo el propietario de la base de datos '''' utilizando la instrucción ALTER AUTHORIZATION.
Se agregó esto a la parte superior del script 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)
Necromaning:
Si no desea usar las vistas SQL-Server 2000 (en desuso), use esto:
-- 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
También previene errores en bases de datos o usuarios con nombres extraños, y también corrige errores si no hay ningún usuario asociado (usa el inicio de sesión de sa).
Este problema puede surgir cuando una base de datos se restauró de una copia de seguridad y el SID del propietario de la base de datos no coincide con el SID del propietario que figura en la base de datos maestra. Aquí hay una solución que usa la instrucción "ALTER AUTHORIZATION" recomendada en el mensaje de error:
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)
Aplique la secuencia de comandos a continuación en la base de datos que obtiene el error:
EXEC sp_changedbowner ''sa''
ALTER DATABASE [database_name] SET TRUSTWORTHY ON
Cuando desee importar un nuevo clr, si recibió este mensaje de error simplemente configure Sa como propietario de su databse, como a continuación, así debería ser el trabajo
Alterar la autorización en la base de datos :: [] a [sa]