Comprobar si ya existe un inicio de sesión de SQL Server
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!
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
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