Prüfen, ob ein Login SQL Server bereits vorhanden
-
21-09-2019 - |
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!
Lösung
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 einzigartigauch 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
akzeptierterstellen 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
schreibencreate 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