Removendo um usuário de uma base SQL Server
Modificado: 21 October 2020
O seu cliente lhe pede com urgência para dropar um usuário da sua base MsSQL Server, mas você trava com o seguinte aviso de erro:
Error: 15138 The database principal owns a schema in the database, and cannot be dropped.
Se você não possui (ou no momento não consegue acesso) ao SSMS (SQL Server Management Studio) para verificar quais schemas ou objetos o usuário é "dono", a seguinte SQL vai resolver o problema.
USE [DATABASENAME]
GO
select so.name Objeto, su.name Owner
from sys.schemas so
inner join sysusers su on so.principal_id = su.uid
where su.name = 'username'
select so.name Objeto, su.name Owner, so.xtype Tipo
from sys.sysobjects so
inner join sysusers su on so.uid = su.uid
where su.name = 'username'
Assim que você tiver os objetos/schemas que o usuário é dono, você pode alterar os mesmos com a seguinte SQL (exemplo de troca de schema):
USE [DATABASENAME]
GO
ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [dbo] -- username do novo dono
ALTER AUTHORIZATION ON SCHEMA::[db_datawriter] TO [dbo]
GO
Então, você pode dropar o usuário DROP USER [username]
.