Vérifier si une connexion SQL Server existe déjà
-
21-09-2019 - |
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!
La solution
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