IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

SQL Server - La FAQConsultez toutes les FAQ

Nombre d'auteurs : 13, nombre de questions : 119, dernière mise à jour : 31 mai 2011  Ajouter une question

 

Question / réponses à tout ce que vous avez toujours voulu savoir sur Microsoft SQL Server sans jamais oser le demander

SommaireAdministration de la base de donnéesUtilisateurs et connexions (11)
précédent sommaire suivant
 

SQL Serveur fournit quatre fonctions permettants de connaître l'utilisateur connecté au serveur pour la session en cours. Exemple:

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE @usr char(30) 
SET @usr = user 
SELECT 'L''utilisateur courant est : ' + @usr 
GO 
--Ou  
SELECT 'L''utilisateur courant est : ' + SUSER_NAME() 
GO 
--Ou encore  
SELECT 'L''utilisateur courant est : ' + SESSION_USER 
GO 
--Nous n'allons pas oublier la fonction Current_user 
SELECT 'L''utilisateur courant est : ' + CURRENT_USER

Mis à jour le 28 septembre 2005 WOLO Laurent

Code tsql : Sélectionner tout
1
2
3
4
5
6
USE MaBase 
GO 
SELECT COUNT(*) 
 FROM master..sysprocesses 
WHERE dbid=db_id() 
GO
ou

Code tsql : Sélectionner tout
1
2
3
SELECT COUNT(*) 
 FROM master..sysprocesses 
WHERE dbid=db_id('MabaseDeDonnée')
Pour la base courante ce sera alors :

Code tsql : Sélectionner tout
1
2
3
SELECT COUNT(*) 
 FROM master..sysprocesses 
WHERE dbid=db_id()

Mis à jour le 28 septembre 2005 WOLO Laurent

Il faut supprimer l'utilisateur et le recréer:

Code tsql : Sélectionner tout
1
2
exec sp_dropuser 'utilisateur' -- drop le user  
exec sp_adduser 'utilateur','login' -- recrée utilisateur et l'associe à login

Mis à jour le 28 septembre 2005 WOLO Laurent

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
create proc sp__cpu as  
/*  
* Auteur : Fabien Celaia  
* Date   : 11/01/2002  
* Desc   : Affiche les processus utilisateurs en cours de traitement  
* Parm   : -  
*/  
SELECT  
     convert(char(4), spid) Spid,  
     convert(char(4), blocked) Blk,  
     convert(char(4), cpu) CPU,  
          left(loginame,15) 'Users',  
     left(hostname, 15) 'Host',  
          left(db_name(dbid),15) DB,  
          convert(char(20), cmd) Command,  
     convert(char(12), program_name) Program ,  
     convert(char(10), status) Status  
FROM master..sysprocesses  
WHERE  spid <> @@spid  
AND status not in ( 'BACKGROUND', 'sleeping')  
ORDER BY cpu DESC  
GO  
GRANT execute on sp__cpu to public  
GO

Mis à jour le 28 septembre 2005 Fabien Celaia

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
CREATE PROC sp__dbuser (@db varchar(30)=NULL)  
AS  
BEGIN  
/*  
* Auteur : Fabien Celaia  
* Date   : 3.3.2002  
* Desc   : Affiche la lsite des utilisateurs de la base courante ou de la base passée en paramètre  
* Parm   : @db = nom de la base (optionel)  
* Return : Nombre d'utilisateurs  
*          -1 si la base n'existe pas  
*/  
set nocount on  
 
declare @i int  
if @db is null  
   select @db=db_name()  
else  
   if not exists(select name from master..sysdatabases where name = @db)  
      begin  
      Print 'La base '+@db+' n''existe pas dans le serveur '+ @@servername  
      return -1  
      end  
 
select @db 'Base'  
print ''  
 
/* Nombre d'utilisateurs */  
select @i=count(spid)  from master..sysprocesses where dbid = db_id(@db) and status <> 'BACKGROUND'  
 
if @i = 0  
   begin  
   print ''  
   print 'Cette base est inutilisée'  
   print ''  
   end  
else  
   begin  
   /* Liste des utilisateurs */  
   declare @snum varchar(4)  
   select @snum = convert(varchar(4), @i)  
   print ''  
   print @snum+' utilisateur(s) trouvés dans la base '+@db+', serveur '+ @@servername  
   print ''  
   select spid, loginame Utilisateur , cmd, program_name from master..sysprocesses  
   where dbid = db_id(@db) and status <> 'BACKGROUND'  
 
   /* Message informationel pour l'utilisateur courant */  
   if exists (select * from master..sysprocesses where spid=@@spid and dbid=db_id(@db))  
      begin  
      print ''  
      print 'FYI : VOUS êtes actuellement connectés à la base  '+@db+', serveur '+@@servername  
      print ''  
      end  
   end  
return @i  
end  
go  
GRANT execute on sp__dbuser to public  
go

Mis à jour le 3 mars 2002 Fabien Celaia

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Create  PROC sp_ddluser (@login varchar(30))  
as  
BEGIN  
/* Auteur : Fabien Celaia  
 * Date   : 6.6.05  
 * Desc   : Extraction du DDL d'un utilisateur spécifique permettant sa recréation multi-serveurs  
 * IParm  : @login (obligatoire) : l'utilisateur à extraire  
 * OParm  : 0 = succès  
 *      -1 = l'utilisateur n'existe pas  
 */  
 
 
if not exists (select * from sysusers where name = @login)  
   begin  
   PRINT 'L''utilisateur '+@login+'n''existe pas dans la base '+db_name()+' du serveur '+@@servername  
   return -1  
   end  
 
if not exists (select * from master..syslogins where name = @login)  
   begin  
   /* Login inexistant => création */  
   select 'exec sp_addlogin '+ @login+ ', MotDePasse'  
   end  
 
SELECT 'EXEC SP_DROPUSER '+@login  
SELECT 'EXEC SP_ADDUSER '+@login+', '+ @login  
 
/* membres de groupes */  
select 'GRANT ROLE '+ g.name +' TO '''+u.name+''''  
from sysmembers m inner join sysusers u  
on m.memberuid = u.uid  
inner join sysusers g  
on m.groupuid=g.uid  
where u.uid > 2  
and u.name = @login  
 
 
/*Droits*/  
select  
case p.protecttype  
   when 206 then 'REVOKE'  
   else 'GRANT ' end +  
 
case p.action  
   when 26 then 'REFERENCES'  
   when 178 then 'CREATE FUNCTION'  
   when 193 then 'SELECT'  
   when 195 then 'INSERT'  
   when 196 then 'DELETE'  
   when 197 then 'UPDATE'  
   when 198 then 'CREATE TABLE'  
   when 203 then 'CREATE DATABASE'  
   when 207 then 'CREATE VIEW'  
   when 222 then 'CREATE PROCEDURE'  
   when 224 then 'EXECUTE'  
   when 228 then 'BACKUP DATABASE'  
   when 233 then 'CREATE DEFAULT'  
   when 235 then 'BACKUP LOG'  
   when 236 then 'CREATE RULE' end +  
' ON ' + o.name +  
case when p.action < 200 then  
   case  when p.protecttype = 206 then ' FROM ' else ' TO ' END +u.name  
else '' end +  
 
case when p.protecttype = 204 then ' WITH GRANT OPTION' else '' end  
 
from sysprotects p  
inner join sysusers u on u.uid=p.uid  
inner join sysobjects o on o.id=p.id  
where    p.columns = 0x01 OR p.columns is null  
and u.name = @login  
order by o.name  
 
end

Mis à jour le 6 juin 2005 Fabien Celaia

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
create proc sp__dbuser (@db varchar(30)=NULL)  
as  
begin  
/*  
* Auteur : Fabien Celaia  
* Date   : 10.8.2005  
* Desc   : Liste les utilisateurs actifs dans la base de données courante OU la base passée en paramètre  
* IParm   : @db = Nom de la base (optionnel)  
* Retour : Nombre d'utilisateurs connectés à la base  
*          -1 si la base passée en paramètre n'existe pas  
*/  
set nocount on  
 
declare @i int  
if @db is null  
   select @db=db_name()  
else  
   if not exists(select name from master..sysdatabases where name = @db)  
      begin  
      Print 'La base '+@db+' n''existe pas sur le serveur SQL '+@@servername  
      return -1  
      end  
 
select @db 'Base de données'  
print ''  
 
/* Number of users */  
select @i=count(spid)  from master..sysprocesses where dbid = db_id(@db) and status <> 'background'  
 
if @i = 0  
   begin  
   print ''  
   print 'Cette base est actuellement inutilisée'  
   print ''  
   end  
else  
   begin  
   /* List of the users */  
   declare @snum varchar(4)  
   select @snum = convert(varchar(4), @i)  
   print ''  
   print @snum+' utilisateurs(s) actifs dans la base '+@db+' du serveur  '+ @@servername  
   print ''  
   select spid, nt_username Utilisateur , cmd, program_name Programme from master..sysprocesses  
   where dbid = db_id(@db)  and status <> 'background'  
 
   /* Informational warning if the current user is in the database */  
   if exists (select * from master..sysprocesses where spid=@@spid and dbid=db_id(@db))  
      begin  
      print ''  
      print 'FYI: VOUS êtes actuellement connectés sur la base '+@db+' du serveur '+ @@servername  
      print ''  
      end  
   end  
return @i  
end

Mis à jour le 10 août 2005 Fabien Celaia

1) Changer de mot de passe après l'avoir sauvé

Code tsql : Sélectionner tout
1
2
select password, name into old_login from master..sysxlogins  
exec sp_password NULL, NouveauMotDePasse, MonLogin
2) Revenir à l'ancien

Code tsql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
exec sp_configure updates,1  
reconfigure with override  
 
update master..sysxlogins  
set password=O.password  
from old_login O, sysxlogins L  
where L.name=O.name  
and O.name='MonUtilisateur'  
 
drop table old_login  
 
exec sp_configure updates,0

Mis à jour le 27 septembre 2005 Fabien Celaia

Code tsql : Sélectionner tout
1
2
3
select name loginname,   updatedate  
from master..syslogins  
where loginname is not null

Mis à jour le 1er septembre 2005 Fabien Celaia

Code tsql : Sélectionner tout
1
2
ALTER DATABASE MABASE 
SET SINGLE USER WITH ROLLBACK IMMEDIATE

Mis à jour le 3 mai 2006 SQLpro

Il y a deux types de connexion avec Micrososft SQL Server.

  • le mode authentification Windows : il permet de laisser au système la tâche d'authentifier le client. Avantage : le mot de passe ne passe pas au travers des paquets TDS et ne peut donc être "sniffé".
  • le mode authentification SQL avec un mot de passe et un login propre au SQL server, sans lien avec le système d'exploitation. Avantage : une distiction claire et nette entre les droits sur la base et ceux sur le système d'exploitation.

En terme de choix, on ne peut spécifier que l'authentification Windows (1) ou l'authentification mixte (1 + 2).

Mis à jour le 21 mars 2007 Fabien Celaia

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.