Saltar al contenido

Comprobar si existe un usuario en una base de datos de SQL Server

Recuerda que en las ciencias informáticas un problema suele tener diferentes resoluciones, no obstante te mostramos lo mejor y más óptimo.

Solución:

Usar sys.database_principals en vez de sys.server_principals.

Entonces, la consulta final se vería así (teniendo en cuenta el filtro de usuario):

USE [MyDatabase]
GO

IF NOT EXISTS (SELECT [name]
                FROM [sys].[database_principals]
                WHERE [type] = N'S' AND [name] = N'IIS APPPOOLMyWebApi AppPool')
Begin
    CREATE USER [IIS APPPOOLMyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOLMyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOLMyWebApi AppPool]
GO

Uso SUSER_ID() y USER_ID() para este tipo de cosas:

-- Check SQL Server Login
IF SUSER_ID('SomeLogin') IS NULL
    CREATE LOGIN SomeLogin WITH PASSWORD = 'SomePassword';

-- Check database user
IF USER_ID('SomeUser') IS NULL
    CREATE USER SomeUser FOR LOGIN SomeLogin;

Un mayor refinamiento ya que esto haría una lectura más óptima

USE [MyDatabase]
GO

IF DATABASE_PRINCIPAL_ID('IIS APPPOOLMyWebApi AppPool') IS NULL
BEGIN
    CREATE USER [IIS APPPOOLMyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOLMyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
END
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOLMyWebApi AppPool]
GO

Comentarios y valoraciones del artículo

Te invitamos a sostener nuestro cometido poniendo un comentario o dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *