2009-05-07 3 views
3

Ich bin ein Entwickler und ich lutsche bei SQL :) Bitte helfen Sie mir hier.SQL CREATE LOGON - kann @ Parameter nicht als Benutzername verwenden

Ich möchte meine eigene Stored Procedure erstellen, die einen Mieter in meiner SaaS-Datenbank erstellt. Um dies zu tun, muss ich eine neue SQL-Anmeldung für den Mandanten erstellen und diese dann einer vordefinierten SQL-Rolle hinzufügen.

Ich bin schon ratlos nur versucht, das Login zu erstellen. Hier ist, was ich versucht habe ...

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 

Msg 102, Ebene 15, Status 1, Prozedur Tenants_InsertTenant, Zeile 16 falsche Syntax nahe '@username'.

Nachricht 319, Ebene 15, Status 1, Prozedur Tenants_InsertTenant, Zeile 16 Falsche Syntax in der Nähe des Schlüsselwortes 'mit'. Wenn es sich bei dieser Anweisung um einen allgemeinen Tabellenausdruck, eine xmlnamespaces-Klausel oder eine Änderungsverfolgungskontextklausel handelt, muss die vorherige Anweisung mit einem Semikolon abgeschlossen werden.

Ich weiß, das einfach sein sollte, aber wenn Ihre neue SQL und SQL Manager Fehler als kryptisch sind, wie sie scheinen mir seine besser, nur um Hilfe zu bitten zu sein :)

Danke, Justin

Antwort

8

Offenbar akzeptiert CREATE LOGIN nur Literale. Sie könnten versuchen, es in einem exec Einwickeln und es als String Aufbau:

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

edit: hinzugefügt QUOTENAME für die Sicherheit von SQL-Injection-Angriffe

+0

Danke für die f ast Antwort. Das scheint zu funktionieren. Ist es besser als mit EXEC sp_addlogin @username, @password Von dem, was ich gelesen habe sp_addlogin ist veraltet. – Justin

+0

Ich weiß nicht, ob es besser als sp_addlogin ist, aber Sie haben Recht, dass sp_addlogin veraltet ist. Aus der Konversation [hier] (http://social.msdn.microsoft.com/Forums/en-US/sqlsecurity/thread/ad63208a-48d1-4307-9275-5bf20a6386a5) scheint es, Exec() ist der einzige offizielle Weg bis Microsoft kommt dazu, den Befehl CREATE LOGIN zu parametrisieren. – codeulike

+2

'Msg 102, Ebene 15, Status 1, Zeile 4 Falsche Syntax in der Nähe von" Name ". –

2

Try this:

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

Posible Lösung:

 
sp_addlogin @loginame = 'test', @passwd = 'test', @defdb = 'test' 

+0

Dies funktioniert auch. Wenn ich nur zwei als Antworten markieren könnte. – Justin

+0

'sp_addlogin' ist veraltet zugunsten von' CREATE LOGIN', leider (https://msdn.microsoft.com/en-us/library/ms173768.aspx) –

Verwandte Themen