我希望能够添加新的SQL LOGIN并在人员电子邮件地址后命名。例如“billg@example.com”。当我将此传递给以下存储过程时,我收到错误(错误遵循过程)。
存储过程:
CREATE PROCEDURE [Forms].[AddLogin]
@Email nvarchar(2048),
@TenantPassword nvarchar(2048)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
EXEC('CREATE LOGIN ' + @Email + ' WITH PASSWORD = ''' + @TenantPassword + ''', DEFAULT_DATABASE = DunderMifflin')
END
错误:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '.'.
我确定我需要做的就是以某种方式对参数进行编码。有帮助吗?如果我通过SQL Manager向导添加用户,我可以指定电子邮件地址,因此我知道它是有效的登录名。
答案 0 :(得分:2)
你应该可以用方括号as detailed here包围它:
EXEC('CREATE LOGIN [' + @Email + '] WITH PASSWORD = ''' + @TenantPassword + ''', DEFAULT_DATABASE = DunderMifflin')
答案 1 :(得分:0)
强制注射警告: 无论你做什么,请不要将用户的密码直接传递给这个例程!!如果用户输入了
的密码该怎么办?bill');DROP DATABASE DunderMifflin;--
然后你基本上执行声明:
CREATE LOGIN billg@microsoft.com WITH PASSWORD = 'bill');
DROP DATABASE DunderMifflin;
-- ''', DEFAULT_DATABASE = DunderMifflin')
那并不好。