it-swarm.com.de

Überprüfen, ob bereits ein SQL Server-Login vorhanden ist

Ich muss überprüfen, ob auf dem SQL Server bereits ein bestimmtes Login vorhanden ist. Wenn dies nicht der Fall ist, muss ich es hinzufügen.

Ich habe den folgenden Code gefunden, um das Login tatsächlich der Datenbank hinzuzufügen, aber ich möchte dies in eine IF-Anweisung einschließen (irgendwie), um zu prüfen, ob das Login zuerst existiert.

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

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

149
Brett Rigby

Ab 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
126
Johnno Nolan

In SQL Server 2005 und höher können Sie dies ohne Verwendung der veralteten Syslogins-Ansicht tun:

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

Die Ansicht server_principals wird anstelle von sql_logins verwendet, da letztere keine Windows-Anmeldungen auflistet.

Wenn Sie vor dem Erstellen der Datenbank nach einem Benutzer in einer bestimmten Datenbank suchen müssen, können Sie Folgendes 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
265
Derek Morrison

Als geringfügige Ergänzung zu diesem Thread möchten Sie im Allgemeinen vermeiden, die Ansichten zu verwenden, die mit sys.sys * beginnen, da Microsoft sie nur aus Gründen der Abwärtskompatibilität enthält. Für Ihren Code sollten Sie wahrscheinlich sys.server_principals verwenden. Dies setzt voraus, dass Sie SQL 2005 oder höher verwenden.

28
Bomlin

Versuchen Sie Folgendes (ersetzen Sie "user" durch den tatsächlichen Anmeldenamen):

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

BEGIN 
    --create login here
END
7
Marc

Dies funktioniert auf SQL Server 2000.

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

Ändern Sie in SQL 2005 die 2. Zeile in 

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

Ich bin mir nicht sicher, was SQL 2008 angeht, aber ich schätze, dass es dasselbe sein wird wie SQL 2005. Wenn nicht, sollte Ihnen dies eine Vorstellung davon geben, wo Sie suchen.

5
David

Sie können die eingebaute Funktion verwenden:

SUSER_ID ( [ 'myUsername' ] )

via

IF [value] IS NULL [statement]

mögen:

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/de-de/library/ms176042(v=sql.110).aspx

4
Hüda

was möchten Sie genau auf Login oder Benutzer prüfen? Ein Login wird auf Serverebene und ein Benutzer auf Datenbankebene erstellt, so dass ein Login auf dem Server eindeutig ist

außerdem wird ein Benutzer gegen eine Anmeldung erstellt. Ein Benutzer ohne Anmeldung ist ein verwaister Benutzer und ist nicht nützlich, da er keine SQL Server-Anmeldung ohne Anmeldung durchführen kann

vielleicht brauchst du das

prüfe auf Login 

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

die obige Abfrage gibt 'X' zurück, wenn ein Login existiert, andernfalls wird NULL zurückgegeben

erstellen Sie dann ein Login

CREATE LOGIN <username> with PASSWORD=<password>

dadurch wird ein Login im SQL-Server erstellt. Es werden jedoch nur sichere Kennwörter akzeptiert

erstellen Sie in jeder Datenbank einen Benutzer, unter dem Sie sich anmelden möchten

CREATE USER <username> for login <username>

dem Benutzer Ausführungsrechte zuweisen 

 GRANT EXECUTE TO <username>

Sie MÜSSEN SYSADMIN-Berechtigungen haben oder kurz "sa" sagen

sie können eine SQL-Prozedur dafür in eine Datenbank schreiben

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

Dies ist für Azure SQL:

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

Quelle: So überprüfen Sie, ob in Azure SQL-Datenbank bereits Datenbankbenutzer vorhanden ist

0
Vinicius