sql >> Base de Datos >  >> RDS >> Sqlserver

¿Estoy tratando de crear un procedimiento almacenado para crear un inicio de sesión y un usuario de base de datos?

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.