Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

J'essaie de créer une procédure stockée pour créer un identifiant et un utilisateur de base de données ?

Envisagez d'utiliser le SQL dynamique pour créer un utilisateur. Par exemple, pour créer une connexion au serveur appelée @login avec un utilisateur de base de données appelé '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

Il peut être plus facile de construire l'instruction SQL côté client. Mais même dans ce cas, vous ne pouviez pas utiliser de paramètres avec le create login déclaration. Soyez donc sur vos gardes à propos de l'injection SQL.