Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ich versuche, eine gespeicherte Prozedur zu erstellen, um ein Login und einen Datenbankbenutzer zu erstellen?

Erwägen Sie die Verwendung von dynamischem SQL zum Erstellen eines Benutzers. Zum Beispiel, um einen Server-Login namens @login zu erstellen mit einem Datenbankbenutzer namens '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

Es könnte einfacher sein, die SQL-Anweisung clientseitig zu erstellen. Aber selbst dann konnten Sie keine Parameter mit create login verwenden Aussage. Seien Sie also auf der Hut vor SQL Injection.