Buenas tardes queridos lectores, feliz día de muertos, el día de hoy les mostraré como borrar un usuario de la base de datos que se resiste a ser eliminado.
Los escenarios pueden ser diversos, pero en el escenario que a mi me sucedió fue que restaure una base de datos en otro servidor, lo que me ocasionó usuarios huérfanos, por lo cual, me disponía a borrar y volver a crear
ese usuario cuando me marcó el error, veamos algo de teoría primero.Usuarios en SQL SERVER
USE [master]
GO
CREATE LOGIN [admin] WITH PASSWORD=N'.', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [prueba]
GO
CREATE USER [leur] FOR LOGIN [admin]
GO
USE [prueba]
GO
ALTER ROLE [db_owner] ADD
MEMBER [leur]
GO
use prueba
go
CREATE PROCEDURE dbo.USP_DBA_Ejemplo
with execute as 'leur'
AS
print 'Procedure de Prueba'
GO
EXEC dbo.USP_DBA_Ejemplo
La entidad de seguridad de base de datos está establecida como el contexto de ejecución de uno o varios procedimientos, funciones o notificaciones de eventos y no se puede quitar
use prueba
go
select * from sys.sysusers
where name = 'leur'
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id), * from sys.system_sql_modules where execute_as_principal_id = 5
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id),* from sys.service_queues where execute_as_principal_id = 5
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id), * from sys.assembly_modules where execute_as_principal_id = 5
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id), * from sys.sql_modules where execute_as_principal_id = 5
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id),* from sys.server_assembly_modules
where execute_as_principal_id = 5
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id),* from sys.server_sql_modules where execute_as_principal_id = 5
Ejecutamos una por una esas consultas y nos irá arrojando los objetos que dependen de ese usuario, en el caso del sp yo lo encontré en esta consulta:
select user_name(execute_as_principal_id) 'execute as user', OBJECT_NAME(object_id), * from sys.sql_modules where execute_as_principal_id = 5
No hay comentarios.:
Publicar un comentario