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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Créer un compte capable de se connecter à une base


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut Créer un compte capable de se connecter à une base
    Bonjour,

    Je souhaiterais créer un compte qui soit capable de se connecter à une base, cette base contient des tables sur lesquels je souhaiterais effectuer des requêtes SQL de type select, insert, update, et delete.
    Mon but est de créer des comptes limité en droit (que du select pour certaines tables).

    Mon problème est que j'utilise des outils comme Excel pour me connecter à SQL Server, par contre j'obtiens une erreur "pas très explicite" :



    Voici les étapes que j'ai effectué :
    1. J'ai tout d'abord regardé au niveau du T-SQL comment on fait pour créer un compte lié à une base. D'après ce que j'ai compris il faut d'abord créer un login (CREATE LOGIN), puis créer un user (CREATE USER), et enfin de lier le login au user.
    Le login permettrait entre autre de pouvoir gérer les bases, et le user les tables d'une base.
    Or ce qui m'intéresse c'est uniquement de pouvoir manipuler les tables d'une base (un compte très limité en somme), pour le reste je me sers du compte admin par défaut.

    Donc pour cela j'ai effectué comme dans la doc, c'est-à-dire autoriser la création d'un compte user lié à une base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    EXEC sys.sp_configure N'contained database authentication', 1;
    RECONFIGURE;
     
    ALTER DATABASE nom_de_ma_base SET CONTAINMENT = PARTIAL;
     
    CREATE USER compte_lecture WITH PASSWORD = 'mon_mot_de_passe';
    Lien officiel : http://technet.microsoft.com/fr-fr/l.../ms191464.aspx
    Une fois le user créé on le voit apparaitre dans Security/Users.


    2. Dans un second temps j'ai pensé à autoriser les connexions TCP/IP, pour cela j'ai ouvert SQL Server Configuration Manager, choisit l'instance par défaut, activé TCP/IP (mettre en enabled), et mettre le port d'écoute à 1433 (port par défaut) :



    3.J'ai redémarré le serveur pour que les modifications soient prises en compte.


    Malgré mes nombreuses recherches, je n'ai pas réussi à résoudre mon problème.
    Pourriez-vous me dire comment je dois m'y prendre pour me connecter au serveur avec SQL Server à partir des machines clientes ? (ps: N'hésitez pas à donner des détails )



    Je vous remercie par avance, cordialement
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Vous avez mélangé plusieurs concepts....

    Soit vous créez un compte de connexion + un user dans la base
    Soit vous créez un user connectable dans une base "CONTAINED"....
    Mais là vous faites un mixte des deux, de ce fait, ça marche pas.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Bonjour Frédéric,

    Merci pour votre réponse. Je travail surtout avec PostgreSQL, et avec celui-ci pas besoin de créer des "LOGIN", on crée juste des "ROLE", l'équivalent des "USER" pour SQL Server je présume, mais avec des droits plus ou moins élevés (database ou table/view).

    Je sais qu'il existe 2 façons de créer un compte avec SQL Server, comme vous les avez cité :
    Soit vous créez un compte de connexion + un user dans la base
    Soit vous créez un user connectable dans une base "CONTAINED"...
    Mais ça je le savais déjà . Ainsi comme je le dis dans mon premier post, je ne souhaite pas créer un compte "LOGIN", je souhaite juste créer un compte "USER" en droit limité pour une DATABASE. Ainsi même un utilisateur non-Windowsien (utilisateur sans authentification Windows) pourrait potentiellement se connecter à cette base.
    Pour cela, je souhaiterais créer "un user connectable dans une base" (la deuxième méthode que vous avez cité).

    Mais là vous faites un mixte des deux, de ce fait, ça marche pas.
    Pourriez-vous me dire à quel niveau je me suis trompé et comment y remédier ? Parce que ce sont les étapes à appliquer que j'ai vu sur internet.


    Je vous remercie par avance, cordialement,
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Le fait qu'il existe des compte de connexion et des utilisateurs est lié au fait que SQL Server est multibase alors que PG ne l'est pas, donc on se connecte à un serveur (par une connexion) qui contient n bases, et on navigue dans chaque base que l'on souhiate à travers des utilisateurs SQL propre à chaque base.
    Depuis la version 2012, il est effectivement possible de se connecter directement à une base si celle ci est "contained". Pour ce faire :

    1) vous devez activer le support des "contained database" au niveau serveur dans sp_configure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EXEC sp_configure 'contained database authentication', 1;
    GO
    RECONFIGURE;
    GO
    2) vous devez autoriser la base à accepter des connexions directes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USE [master]
    GO
    ALTER DATABASE [Ma8BASE] SET CONTAINMENT = PARTIAL WITH NO_WAIT
    GO
    3) vous pouvez maintenant créer autant d'utilisateurs pouvant se connecter à la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USE [MA_BASE]
    GO
    CREATE USER [USR_CNX_ALFA] WITH PASSWORD = 'mon passe à moi'
    GO
    4) vous devez maintenant définir les privilèges, soit par des rôles (prédéfinis ou non) soit par des privilèges directs ou indirects.
    Exemple : privilèges INSERT, UPDATE, DELETE, SELECT et EXECUTE définis indirectement au niveau de la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GRANT INSERT, UPDATE, DELETE, SELECT, EXECUTE
    ON DATABASE::MA_BASE TO USR_CNX_ALFA;
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Merci pour votre réponse Frédéric,

    C'est pourtant ce que j'ai effectué comme étapes. Les seules différences sont que :
    • vous avez ajouté "WITH NO_WAIT" pour la 2ème étape (donc j'ai ajouté WITH NO WAIT moi aussi).
    • j'ai accepté d'ouvrir le port TCP 1433 via SQL Server Configuration Manager.
    • j'ai accepté d'ouvrir le port TCP 1433 via le firewall Windows.


    Le message d'erreur est toujours le même, je pense que la SQL Server est reconnu comme existant lorsqu'on essaye de s'y connecter via un client, mais le compte lui n'est pas reconnu.

    Cordialement,
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  6. #6
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2013
    Messages : 74
    Par défaut
    Bonjour,
    Votre problème est peut-être lié au fait que vous ne spécifiez pas la base de données à atteindre lors de la connexion:
    • Lorsque vous créez un couple Login/User, il vous est possible de vous connecter à l'instance (vous arrivez dans ce cas dans la base par défaut du login). Vous pouvez alors consulter certaines données du dictionnaire, comme par exemple la liste des bases existantes (l'erreur que vous remontez dans votre copie d'écran correspond justement au fait que cette récupération de liste est impossible). Vous pourrez ensuite travailler dans une base (on parle de prise de contexte) spécifique sur laquelle existe un user correspondant à votre login.
    • Lorsque vous créez un utilisateur dans une "Contained Database", vous ne pouvez pas vous connecter de manière classique à l'instance puis effectuer une prise de contexte dans une base; vous devez nécessairement arriver directement dans la base sur lequel le user est défini.

    Donc, concrètement, je pense qu'il faut que vous spécifiez à la main le champ "Nom de la base de données" dans votre chaîne de connexion Excel la base sur laquelle le user a été créé, et la connexion devrait fonctionner.

Discussions similaires

  1. Créer un compte qui donne accès seulement à une imprimante
    Par bart64 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 06/09/2006, 20h19
  2. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 16h05
  3. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2004, 14h03
  4. Comment se connecter à une base SQL server
    Par zapia dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/10/2003, 18h39
  5. Réponses: 2
    Dernier message: 26/08/2003, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo