Pregunta

Tengo que comprobar si un inicio de sesión específica ya existe en el servidor SQL, y si no lo hace, entonces necesito para añadirlo.

He encontrado el siguiente código para agregar realmente el inicio de sesión a la base de datos, pero quiero terminar con esto de una instrucción IF (de alguna manera) para comprobar si existe el inicio de sesión por primera vez.

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

Yo entiendo que tengo que interrogar a una base de datos del sistema, pero no está seguro por dónde empezar!

¿Fue útil?

Solución

href="http://www.windows-tech.info/15/83ccec1ea337809a.php" 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

Otros consejos

Aquí hay una manera de hacer esto en SQL Server 2005 y versiones posteriores sin necesidad de utilizar las syslogins en desuso ver:

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

La vista server_principals se utiliza en lugar de sql_logins ya que este último no muestra los inicios de sesión de Windows.

Si necesita comprobar la existencia de un usuario en una base de datos en particular antes de la creación de ellos, entonces usted 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

Como una pequeña adición a este tema, en general se desea evitar el uso de las vistas que comienzan con sys.sys * como Microsoft está incluyendo solamente ellos por compatibilidad hacia atrás. Para su código, probablemente debería utilizar sys.server_principals. Esto es suponiendo que está utilizando SQL 2005 o superior.

Probar (reemplace 'usuario' con el nombre de inicio de sesión real):

IF NOT EXISTS(
SELECT name 
FROM [master].[sys].[syslogins]
WHERE NAME = 'user')

BEGIN 
    --create login here
END

Puede utilizar la función incorporada:

SUSER_ID ( [ 'myUsername' ] )

a través de

IF [value] IS NULL [statement]

como:

IF SUSER_ID (N'myUsername') IS NULL
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

https://technet.microsoft.com /en-us/library/ms176042(v=sql.110).aspx

Esto funciona en SQL Server 2000.

use master
select count(*) From sysxlogins WHERE NAME = 'myUsername'

en SQL 2005, cambiar la segunda línea a

select count(*) From syslogins WHERE NAME = 'myUsername'

No estoy seguro acerca de SQL 2008, pero supongo que va a ser el mismo que SQL 2005 y si no es así, esto debe darle una idea de donde empezar a buscar t.

¿qué exactamente quiere comprobar si hay entrada o usuario? un inicio de sesión se crea en el nivel de servidor y se crea un usuario a nivel de base de datos para un inicio de sesión único en el servidor

También se crea un usuario frente a un inicio de sesión, un usuario sin inicio de sesión es un usuario huérfano y no es útil como u no puede llevar a cabo de inicio de sesión de SQL Server sin un inicio de sesión

tal vez necesidad de u este

cheque de inicio de sesión

select 'X' from master.dbo.syslogins where loginname=<username>

La consulta anterior retorno 'X' si existe entrada nula rentabilidad demás

a continuación, crear un inicio de sesión

CREATE LOGIN <username> with PASSWORD=<password>

Esto crea un inicio de sesión en el servidor SQL .pero acepta contraseñas fuertes solamente

crear un usuario en cada base de datos que desea para iniciar la sesión como

CREATE USER <username> for login <username>

Asignar derechos de ejecución a usuario

 GRANT EXECUTE TO <username>

Debe tener permisos de administrador de sistemas o decir 'sa' para abreviar

Puede escribir un procedimiento de SQL para que en una base de datos

create proc createuser
(
@username varchar(50),
@password varchar(50)
)
as
begin
if not exists(select 'X' from master.dbo.syslogins where loginname=@username)
begin
 if not exists(select 'X' from sysusers where name=@username)
 begin
exec('CREATE LOGIN '+@username+' WITH PASSWORD='''+@password+'''')
exec('CREATE USER '+@username+' FOR LOGIN '+@username)
exec('GRANT EXECUTE TO '+@username)
end
end
end

Esto es para SQL Azure:

IF (EXISTS(SELECT TOP 1 1 FROM sys.sql_logins WHERE [name] = '<login>'))
    DROP LOGIN [<login>];

Fuente: Cómo comprobar si el usuario de base de datos ya existe en la base de datos SQL Azure

En primer lugar usted tiene que comprobar la existencia de inicio de sesión utilizando syslogins ver:

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

A continuación, usted tiene que comprobar su existencia base de datos:

USE your_dbname

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'your_dbname')
BEGIN
    CREATE USER [your_dbname] FOR LOGIN [YourLoginName] 
END
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top