without with usuario transact studio management example create crear sql stored-procedures login saas

with - sql server create login example



SQL CREATE LOGON-no puede usar @parameter como nombre de usuario (3)

Soy desarrollador y apelo en SQL :) Por favor, ayúdenme aquí.

Me gustaría crear mi propio Procedimiento almacenado que crea un Inquilino en mi base de datos SaaS. Para hacer esto, necesito crear un nuevo inicio de sesión SQL para el inquilino y luego agregarlo a un rol de SQL predefinido.

Ya estoy perplejo solo tratando de crear el inicio de sesión. Esto es lo que he intentado ...

CREATE PROCEDURE [MyScheme].[Tenants_InsertTenant] @username nvarchar(2048), @password nvarchar(2048) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; CREATE LOGIN @username WITH PASSWORD = @password END

Msg 102, nivel 15, estado 1, procedimiento Tenants_InsertTenant, línea 16 Sintaxis incorrecta cerca de ''@nombre de usuario''.

Msg 319, nivel 15, estado 1, procedimiento Tenants_InsertTenant, línea 16 Sintaxis incorrecta cerca de la palabra clave ''con''. Si esta instrucción es una expresión de tabla común, una cláusula xmlnamespaces o una cláusula de contexto de seguimiento de cambios, la instrucción anterior debe terminarse con un punto y coma.

Me doy cuenta de que esto debería ser sencillo, pero cuando los errores nuevos en SQL y SQL Manager son tan crípticos como parecen ser para mí, es mejor pedir ayuda :)

Gracias, Justin


Prueba esto:

declare @t nvarchar(4000) set @t = N''CREATE LOGIN '''''''''' + @username + '''''''''' WITH PASSWORD = '''''''''' + @password exec sys.sp_executesql @t


Solución posible:

sp_addlogin @loginame = ''test'', @passwd = ''test'', @defdb = ''test''


Al parecer, CREATE LOGIN solo acepta literales. Podría intentar envolverlo en un ejecutivo y compilarlo como una cadena:

EXEC(''CREATE LOGIN '' + quotename(@username) + '' WITH PASSWORD = '' + quotename(@password, ''''''''))

editar: quotename añadido para la seguridad de los ataques de inyección sql