Frage

Ich muss überprüfen, ob ein bestimmtes Login existiert bereits auf dem SQL Server, und wenn es nicht der Fall ist, dann muss ich es hinzuzufügen.

Ich habe den folgenden Code gefunden, um tatsächlich die Anmeldung zur Datenbank hinzufügen, aber ich mag diese in einem einzuwickeln IF-Anweisung (irgendwie) zu prüfen, ob die Login ersten vorhanden ist.

CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

Ich verstehe, dass ich brauche eine Systemdatenbank abfragen, aber nicht sicher, wo ich anfangen soll!

War es hilfreich?

Lösung

hier

If not Exists (select loginname from master.dbo.syslogins 
    where name = @loginName and dbname = 'PUBS')
Begin
    Select @SqlStatement = 'CREATE LOGIN ' + QUOTENAME(@loginName) + ' 
    FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')

    EXEC sp_executesql @SqlStatement
End

Andere Tipps

Hier ist ein Weg, dies in SQL Server 2005 zu tun und später ohne die veralteten syslogins mit anzuzeigen:

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = 'LoginName')
BEGIN
    CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END

Die server_principals Ansicht wird statt sql_logins verwendet, weil diese nicht Liste Windows-Logins.

Wenn Sie für die Existenz eines Benutzers in einer bestimmten Datenbank überprüfen müssen, bevor sie zu schaffen, dann können Sie dies tun:

USE your_db_name

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'Bob')
BEGIN
    CREATE USER [Bob] FOR LOGIN [Bob] 
END

Als kleiner Zusatz zu diesem Thema im Allgemeinen wollen Sie die Ansichten vermeiden, verwenden, die mit sys.sys beginnen * wie Microsoft nur sie für die Abwärtskompatibilität mit. Für Ihren Code, sollten Sie wahrscheinlich verwenden sys.server_principals. Dies wird vorausgesetzt, Sie SQL 2005 oder höher verwenden.

Versuchen Sie, diese (ersetzen 'user' mit dem eigentlichen Login-Namen):

IF NOT EXISTS(
SELECT name 
FROM [master].[sys].[syslogins]
WHERE NAME = 'user')

BEGIN 
    --create login here
END

Sie können die eingebaute Funktion verwenden:

SUSER_ID ( [ 'myUsername' ] )

über

IF [value] IS NULL [statement]

wie:

IF SUSER_ID (N'myUsername') IS NULL
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

https://technet.microsoft.com /en-us/library/ms176042(v=sql.110).aspx

Dies funktioniert auf SQL Server 2000.

use master
select count(*) From sysxlogins WHERE NAME = 'myUsername'

auf SQL 2005, ändern Sie die zweite Zeile

select count(*) From syslogins WHERE NAME = 'myUsername'

Ich bin nicht sicher über SQL 2008, aber ich glaube, dass es die gleiche wie SQL 2005 sein wird, und wenn nicht, soll dies Ihnen eine Vorstellung davon, wo t beginnen suchen.

was wollen Sie genau Check für Anmeldung oder Benutzer? ein Login auf Server-Ebene erstellt und ein Benutzer auf Datenbankebene erstellt so ein Login in Server

ist einzigartig

auch ein Benutzer gegen ein Login erstellt wird, ein Benutzer ohne Login ein verwaister Benutzer und ist nicht nützlich, da u Login SQL Server durchführen kann nicht ohne Login

vielleicht brauchen u dieses

Nach login

select 'X' from master.dbo.syslogins where loginname=<username>

Die obige Abfrage Rückkehr 'X', wenn Login existiert sonst return null

erstellen Sie dann eine Login

CREATE LOGIN <username> with PASSWORD=<password>

Dies erzeugt einen Login in SQL Server .aber es nur starke Passwörter

akzeptiert

erstellen Sie einen Benutzer in jeder Datenbank, die Sie für die Anmeldung wollen als

CREATE USER <username> for login <username>

assign ausführen Rechte an Benutzer

 GRANT EXECUTE TO <username>

SIE MÜSSEN SYSADMIN Berechtigungen oder sagen 'sa' für kurze

können Sie eine SQL-Prozedur für das auf einer Datenbank

schreiben
create proc createuser
(
@username varchar(50),
@password varchar(50)
)
as
begin
if not exists(select 'X' from master.dbo.syslogins where loginname=@username)
begin
 if not exists(select 'X' from sysusers where name=@username)
 begin
exec('CREATE LOGIN '+@username+' WITH PASSWORD='''+@password+'''')
exec('CREATE USER '+@username+' FOR LOGIN '+@username)
exec('GRANT EXECUTE TO '+@username)
end
end
end

Dies ist für Azure SQL:

IF (EXISTS(SELECT TOP 1 1 FROM sys.sql_logins WHERE [name] = '<login>'))
    DROP LOGIN [<login>];

Quelle: Wie kann man überprüfen ob Datenbankbenutzer existiert bereits in Azure SQL-Datenbank

Als erstes müssen Sie Login Existenz überprüfen syslogins mit anzuzeigen:

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = 'YourLoginName')
BEGIN
    CREATE LOGIN [YourLoginName] WITH PASSWORD = N'password'
END

Dann müssen Sie Ihre Datenbank Existenz überprüfen:

USE your_dbname

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'your_dbname')
BEGIN
    CREATE USER [your_dbname] FOR LOGIN [YourLoginName] 
END
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top