Question

Je dois vérifier si une connexion spécifique existe déjà sur le serveur SQL, et si elle ne le fait pas, alors je dois l'ajouter.

J'ai trouvé le code suivant pour ajouter réellement de la connexion à la base de données, mais je veux envelopper ceci dans une instruction IF (en quelque sorte) pour vérifier si la connexion existe d'abord.

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

Je comprends que je dois interroger une base de données de système, mais pas sûr où commencer!

Était-ce utile?

La solution

De

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

Autres conseils

Voici une façon de le faire dans SQL Server 2005 et plus tard sans utiliser les syslogins déconseillés voir:

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

La vue server_principals est utilisé au lieu de sql_logins parce que ce dernier ne répertorie pas les connexions Windows.

Si vous devez vérifier l'existence d'un utilisateur dans une base de données particulière avant de les créer, vous pouvez faire ceci:

USE your_db_name

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

En plus mineur à ce fil, en général, vous voulez éviter d'utiliser les vues qui commencent par sys.sys * que Microsoft ne les y compris pour la compatibilité ascendante. Pour votre code, vous devriez probablement utiliser sys.server_principals. Ceci suppose que vous utilisez SQL 2005 ou plus.

Essayez ceci (remplacer 'utilisateur' avec le nom de connexion réelle):

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

BEGIN 
    --create login here
END

Vous pouvez utiliser la fonction intégrée:

SUSER_ID ( [ 'myUsername' ] )

via

IF [value] IS NULL [statement]

comme:

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

Cela fonctionne sur SQL Server 2000.

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

sur SQL 2005, changer la 2ème ligne à

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

Je ne suis pas sûr de SQL 2008, mais je suppose que ce sera le même que SQL 2005 et sinon, cela devrait vous donner une idée de l'endroit où commencer à chercher t.

qu'est-ce que vous voulez exactement vérifier la connexion ou l'utilisateur? une connexion est créée au niveau du serveur et un utilisateur est créé au niveau de la base de données pour une connexion unique au serveur

également un utilisateur est créé contre une connexion, un utilisateur sans connexion est un utilisateur et ne sont pas devenus orphelins utile comme u cant effectuer la connexion serveur sql sans connexion

u peut-être besoin de ce

chèque de connexion

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

le retour de requête ci-dessus « X » si la connexion existe nulle autre retour

puis créez une connexion

CREATE LOGIN <username> with PASSWORD=<password>

crée une connexion avec un serveur SQL .mais il accepte uniquement les mots de passe forts

créer un utilisateur dans chaque base de données que vous voulez pour se connecter comme

CREATE USER <username> for login <username>

assign les droits d'exécution à l'utilisateur

 GRANT EXECUTE TO <username>

devez disposer des autorisations ou SYSADMIN dire 'sa' pour court

vous pouvez écrire une procédure SQL pour que, sur une base de données

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

Ceci est pour SQL Azure:

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

Source: Comment vérifier si l'utilisateur de base de données existe déjà dans Azure de base de données SQL

D'abord, vous devez vérifier l'existence de connexion à l'aide syslogins voir:

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

Ensuite, vous devez vérifier votre existence de la base de données:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top