복붙노트

[SQL] 로그온을 생성 - SQL 사용자 이름으로 @parameter 사용할 수 없습니다

SQL

로그온을 생성 - SQL 사용자 이름으로 @parameter 사용할 수 없습니다

나는 개발자 그리고 난 SQL 빨아 :) 여기에 저를 도와주세요.

내 SaaS는 데이터베이스에 세입자를 만들어 내 자신의 저장 프로 시저를 작성하고 싶습니다. 임차인에 대한 새로운 SQL 로그인을 생성하고 미리 정의 된 SQL 역할에 추가하려면이 I의 필요성을하기 위해.

난 이미 바로 로그인을 만들려고 난처한 해요. 여기에 내가 무엇을 시도했다입니다 ...

CREATE PROCEDURE [MyScheme].[Tenants_InsertTenant]
    @username nvarchar(2048),
    @password nvarchar(2048)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    CREATE LOGIN @username WITH PASSWORD = @password
END

나는이 간단해야 실현하지만, SQL 및 SQL 관리자 오류에 새가 비밀로 할 때 그들은 단지 도움을 요청하기 위해 더 내게 될 것으로 :)

감사, 저스틴

해결법

  1. ==============================

    1.분명히 LOGIN은 리터럴을 받아 작성하십시오. 당신은 간부에 포장하고 문자열로 구축을 시도 할 수 있습니다 :

    분명히 LOGIN은 리터럴을 받아 작성하십시오. 당신은 간부에 포장하고 문자열로 구축을 시도 할 수 있습니다 :

    EXEC('CREATE LOGIN ' + quotename(@username) + ' WITH PASSWORD = ' + quotename(@password, ''''))
    

    편집 : SQL 주입 공격으로부터 안전을 위해 추가 QUOTENAME

  2. ==============================

    2.가능한 해결책:

    가능한 해결책:

    sp_addlogin을 @loginame = '검사'@passwd = '검사'@defdb = '검사'

  3. ==============================

    3.이 시도:

    이 시도:

    declare @t nvarchar(4000)
    set @t = N'CREATE LOGIN ''''' + @username + ''''' WITH PASSWORD = ''''' + @password
    exec sys.sp_executesql @t
    
  4. ==============================

    4.@codeulike 및 @Galkin I의 답변에 구축이 일을 결국 :

    @codeulike 및 @Galkin I의 답변에 구축이 일을 결국 :

    DECLARE @t nvarchar(4000)
    SET @t = N'CREATE LOGIN ' + QUOTENAME(@username) + ' WITH PASSWORD = ' + QUOTENAME(@password, '''') + ', default_database = ' + QUOTENAME(@DatabaseName)
    EXEC(@t)
    

    내가 SQL 서버 2019를 실행하고 EXEC를 결합하고있어 (-> QUOTENAME와 () 내부 <-) 작동하지 않습니다.

    나는 그 SQL 주입으로부터 보호 실행 문자열을 구축 할 QUOTENAME를 사용하여 Microsoft SQL 주입 문서를 이해합니다.

  5. from https://stackoverflow.com/questions/837358/sql-create-logon-cant-use-parameter-as-username by cc-by-sa and MIT license