Comprobar si ya existe un inicio de sesión de SQL Server

Resuelto Brett Rigby asked hace 15 años • 11 respuestas

Necesito verificar si ya existe un inicio de sesión específico en SQL Server y, si no es así, debo agregarlo.

Encontré el siguiente código para agregar el inicio de sesión a la base de datos, pero quiero incluirlo en una declaración IF (de alguna manera) para verificar si el inicio de sesión existe primero.

CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

Entiendo que necesito consultar una base de datos del sistema, ¡pero no estoy seguro de por dónde empezar!

Brett Rigby avatar Sep 04 '09 20:09 Brett Rigby
Aceptado

A continuación se muestra una manera de hacer esto en SQL Server 2005 y versiones posteriores sin utilizar la vista syslogins obsoleta:

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = 'LoginName')
BEGIN
    CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END

Se utiliza la vista server_principals en lugar de sql_logins porque esta última no enumera los inicios de sesión de Windows.

Si necesita verificar la existencia de un usuario en una base de datos en particular antes de crearlo, puede hacer esto:

USE your_db_name

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'Bob')
BEGIN
    CREATE USER [Bob] FOR LOGIN [Bob] 
END
Derek Morrison avatar Dec 22 '2009 09:12 Derek Morrison

De aquí

If not Exists (select loginname from master.dbo.syslogins 
    where name = @loginName and dbname = 'PUBS')
Begin
    Select @SqlStatement = 'CREATE LOGIN ' + QUOTENAME(@loginName) + ' 
    FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')

    EXEC sp_executesql @SqlStatement
End
Johnno Nolan avatar Sep 04 '2009 14:09 Johnno Nolan