Vérification de L'existence d'une connexion au serveur SQL
je dois vérifier si un login spécifique existe déjà sur le serveur SQL, et si ce n'est pas le cas, je dois l'ajouter.
j'ai trouvé le code suivant pour ajouter réellement le login à la base de données, mais je veux envelopper ceci dans une instruction IF (en quelque sorte) pour vérifier si le login existe en premier.
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 système, mais pas sûr où commencer!
9 réponses
à Partir de ici
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
Voici une façon de faire cela dans SQL Server 2005 et plus tard sans utiliser la vue syslogins dépréciée:
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ée à la place de sql_logins car ce dernier ne Liste pas les logins Windows.
si vous devez vérifier l'existence d'un utilisateur dans une base de données particulière avant de les créer, alors vous pouvez le faire:
USE your_db_name
IF NOT EXISTS
(SELECT name
FROM sys.database_principals
WHERE name = 'Bob')
BEGIN
CREATE USER [Bob] FOR LOGIN [Bob]
END
comme un ajout mineur à ce fil, en général, vous voulez éviter d'utiliser les vues qui commencent par sys.sys* as Microsoft ne les inclut que pour la rétrocompatibilité. Pour votre code, vous devriez probablement utiliser sys.server_principals. Cela suppose que vous utilisez SQL 2005 ou plus.
essayez ceci (remplacez 'user' par le nom de connexion actuel):
IF NOT EXISTS(
SELECT name
FROM [master].[sys].[syslogins]
WHERE NAME = 'user')
BEGIN
--create login here
END
cela fonctionne sur SQL Server 2000.
use master
select count(*) From sysxlogins WHERE NAME = 'myUsername'
sur SQL 2005, changer la 2ème ligne en
select count(*) From syslogins WHERE NAME = 'myUsername'
Je ne suis pas sûr à propos de SQL 2008, mais je devine qu'il sera le même que SQL 2005 et si non, cela devrait vous donner une idée de l'endroit où commencer à chercher.
qu'est-ce que vous voulez exactement vérifier pour le login ou l'utilisateur ? un login est créé au niveau du serveur et un utilisateur est créé au niveau de la base de données de sorte qu'un login est unique dans le serveur
aussi un utilisateur est créé contre un login, un utilisateur sans login est un utilisateur orphelin et n'est pas utile car l'utilisateur ne peut pas effectuer de login sql serveur sans un login
peut-être que vous en avez besoin
vérifier l'ouverture de session
select 'X' from master.dbo.syslogins where loginname=<username>
la requête ci-dessus de retour de " X " si la connexion existe else return null
puis créer un login
CREATE LOGIN <username> with PASSWORD=<password>
crée une connexion dans sql server .mais il n'accepte que les mots de passe forts
créer un utilisateur dans chaque base de données que vous voulez pour vous connecter comme
CREATE USER <username> for login <username>
attribuer des droits d'exécution à l'utilisateur
GRANT EXECUTE TO <username>
VOUS DEVEZ disposer des autorisations de SYSADMIN ou de dire " sa " à court
vous pouvez ecrire une procédure sql pour cela 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
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
C'est pour Azure SQL:
IF (EXISTS(SELECT TOP 1 1 FROM sys.sql_logins WHERE [name] = '<login>'))
DROP LOGIN [<login>];
Source: Comment vérifier si un utilisateur de base de données existe déjà dans la base de données SQL Azure
vous devez d'abord vérifier l'existence d'une connexion en utilisant syslogins view:
IF NOT EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'YourLoginName')
BEGIN
CREATE LOGIN [YourLoginName] WITH PASSWORD = N'password'
END
alors vous devez vérifier l'existence de votre 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