usuarios usuario tiene solucion sirve sesión sesion que puede porque permiso para modificar inicio existe error crear con codigo sql-server login

usuario - Comprobando si ya existe un inicio de sesión de SQL Server



para que sirve el usuario sa en sql server (9)

¿Qué es exactamente lo que quieres comprobar para iniciar sesión o para el usuario? se crea un inicio de sesión en el nivel del servidor y se crea un usuario a nivel de base de datos para que el inicio de sesión sea único en el servidor

también se crea un usuario contra un inicio de sesión, un usuario sin inicio de sesión es un usuario huérfano y no es útil ya que no puede llevar a cabo el inicio de sesión del servidor sql sin un inicio de sesión

tal vez necesites esto

verificar el inicio de sesión

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

la consulta anterior devuelve ''X'' si el inicio de sesión existe, devuelve nulo

luego crea un inicio de sesión

CREATE LOGIN <username> with PASSWORD=<password>

esto crea un inicio de sesión en el servidor SQL .pero solo acepta contraseñas seguras

crea un usuario en cada base de datos que quieras para iniciar sesión como

CREATE USER <username> for login <username>

asignar derechos de ejecución al usuario

GRANT EXECUTE TO <username>

DEBE TENER permisos SYSADMIN o decir ''sa'' para abreviar

puedes escribir un procedimiento sql para eso 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

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

He encontrado el siguiente código para agregar realmente el inicio de sesión a la base de datos, pero quiero ajustar esto 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 interrogar a una base de datos del sistema, ¡pero no estoy seguro por dónde empezar!


Como una pequeña adición a este hilo, en general, desea evitar el uso de las vistas que comienzan con sys.sys *, ya que Microsoft solo las incluye para compatibilidad con versiones anteriores. Para su código, probablemente debería usar sys.server_principals. Esto supone que estás usando SQL 2005 o superior.


De here

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


En primer lugar, debe verificar la existencia de inicio de sesión mediante la vista syslogins:

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

Entonces debes verificar la existencia de tu 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


Esta es una forma de hacerlo en SQL Server 2005 y posteriores sin utilizar la vista de syslogins en desuso:

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 usa en lugar de sql_logins porque esta última no muestra los inicios de sesión de Windows.

Si necesita verificar la existencia de un usuario en una base de datos en particular antes de crearlos, 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



Esto funciona en SQL Server 2000.

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

en SQL 2005, cambie la segunda línea a

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

No estoy seguro acerca de SQL 2008, pero supongo que será lo mismo que SQL 2005 y si no, esto debería darle una idea de dónde empezar a buscar.


Pruebe esto (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 usar la función incorporada:

SUSER_ID ( [ ''myUsername'' ] )

vía

IF [value] IS NULL [statement]

me gusta:

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