Considere usar SQL dinámico para crear un usuario. Por ejemplo, para crear un inicio de sesión en el servidor llamado @login
con un usuario de base de datos llamado 'DEV' + @login
:
create procedure dbo.CreateLoginAndUser(
@login varchar(100),
@password varchar(100),
@db varchar(100))
as
declare @safe_login varchar(200)
declare @safe_password varchar(200)
declare @safe_db varchar(200)
set @safe_login = replace(@login,'''', '''''')
set @safe_password = replace(@password,'''', '''''')
set @safe_db = replace(@db,'''', '''''')
declare @sql nvarchar(max)
set @sql = 'use ' + @safe_db + ';' +
'create login ' + @safe_login +
' with password = ''' + @safe_password + '''; ' +
'create user DEV' + @safe_login + ' from login ' + @safe_login + ';'
exec (@sql)
go
Podría ser más fácil construir la instrucción SQL del lado del cliente. Pero incluso entonces, no podría usar parámetros con create login
declaración. Así que manténgase alerta sobre la inyección de SQL.