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
- Comment connaître le nom de l'utilisateur connecté au serveur?
- Comment obtenir le nombre d'utilisateurs connectés à une base de données ?
- Je n'arrive pas à créer un utilisateur, le système me dit : user already exist ?
- Quelle requête retourne les processus en train de consommer ?
- Afficher la liste des utilisateurs d'une base spécifique ou de la base courante
- Comment extirper un DDL complet pour un utilisateur donné ?
- Comment afficher les utilisateurs actifs d'une base particulière ?
- Comment changer temporairement un mot de passe que l'on ne connaît pas ?
- Comment connaître la dernière date de modification du mot de passe des logins ?
- Comment configurer une base de données en mode utilisateur unique ?
- Quel est le type de connexion le plus sûr ?
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 |
Code tsql : | Sélectionner tout |
1 2 3 4 5 6 | USE MaBase GO SELECT COUNT(*) FROM master..sysprocesses WHERE dbid=db_id() GO |
Code tsql : | Sélectionner tout |
1 2 3 | SELECT COUNT(*) FROM master..sysprocesses WHERE dbid=db_id('MabaseDeDonnée') |
Code tsql : | Sélectionner tout |
1 2 3 | SELECT COUNT(*) FROM master..sysprocesses WHERE dbid=db_id() |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
Code tsql : | Sélectionner tout |
1 2 3 | select name loginname, updatedate from master..syslogins where loginname is not null |
Code tsql : | Sélectionner tout |
1 2 | ALTER DATABASE MABASE SET SINGLE USER WITH ROLLBACK IMMEDIATE |
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).
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 çaLes 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.