sql >> Databasteknik >  >> RDS >> Sqlserver

Jag försöker skapa en lagrad procedur för att skapa en inloggning och en databasanvändare?

Överväg att använda dynamisk SQL för att skapa en användare. Till exempel för att skapa en serverinloggning som heter @login med en databasanvändare som heter '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

Det kan vara lättare att konstruera SQL-satsen på klientsidan. Men även då kunde du inte använda parametrar med create login påstående. Så var på din vakt när det gäller SQL Injection.



  1. Hur INTERSECT fungerar i SQL Server

  2. Hur matchar och sorterar man efter likhet i MySQL?

  3. Hur får man ett heltal från MySQL som heltal i PHP?

  4. MySQL - Hur kan man koppla bort kolumner till rader?