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

Administration SQL Server Discussion :

Accès au compte windows rejeté depuis une procédure Php sous Wamp.


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut Accès au compte windows rejeté depuis une procédure Php sous Wamp.
    Bonjour à tous.

    J'ai installé, il y a quelques jours la version gratuite de SQL Server 2014 Express (cela va faire plaisir à SQLPRO car je vais enfin me mettre à SQL Server).
    J'ai fait quelques tests sans trop de problèmes, en ligne de commande avec "SQLCMD".
    Jusqu'à présent, tout fonctionne correctement, sauf que je me retrouve avec un problème d'administration que je n'arrive pas à résoudre.

    Quand je lance "sqlcmd", avec le paramétrage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcmd -S orion\SQLEXPRESS  -e  -E  -i %FIC%  -c ;
    dans un batch windows, je constate que j’accède à mon compte windows (-E (use trusted connection)).
    C'est ce que je voulais et c'est tout à fait normal, car j'ai demandé à l'installation un accès avec authentification windows. Mon compte "ordi\compte".

    Sous WampServer, j'ai testé un accès à ma base de données "My_Base" que j'ai créé en ligne de commande, donc sous le compte "ordi\compte".
    Pour ce test, je suis passé par le driver "sqlsrv", que j'ai dû installer sur mon ordinateur pour la version php que j'utilise.

    Question 1 : pourquoi n'existe-t-il pas une version 64 bits de ce driver ? Ni une version pour php 7.0 ?

    J'ai fait un accès avec le paramétrage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $nom_du_serveur  = "ordi\SQLExpress";
    $info_connexion  = array("DATABASE"=>"My_Base", "UID"=>"", "PWD"=>"");
    $link = sqlsrv_connect($nom_du_serveur,$info_connexion);
    J'ai obtenu le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQLSTATE : 28000
    Code     : 18456
    Message  : [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Échec de l'ouverture de session de l'utilisateur 'AUTORITE NT\Système'.
    Il m'a fallu du temps pour comprendre que je devais ajouter des autorisations au compte "AUTORITE NT \Système".
    Et pour ce faire, je devais utiliser : "SQL Server 204 Management Studio". J'ai pu résoudre mon problème sans trop de difficulté et tout est rentré dans l'ordre.

    Question 2 : pourquoi ai-je par défaut ce compte ? Je m'attendais à obtenir "Ordi\Compte.

    Je modifie les paramètres de mon accès via php, en mettant ceux de mon compte windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $nom_du_serveur  = "ordi\SQLExpress";
    $info_connexion  = array("DATABASE"=>"My_Base", "UID"=>"ordi\compte", "PWD"=>"motdepasse");
    $link = sqlsrv_connect($nom_du_serveur,$info_connexion);
    J'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQLSTATE : 28000
    Code     : 18456
    Message  : [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Échec de l'ouverture de session de l'utilisateur 'ordi\compte'.
    J'ai reporté les mêmes modifications que j'ai fait pour le compte "AUTORITE NT\Système", et j'ai l'erreur ci-dessus.
    De plus, que ce soit avec "AUTORITE NT\Système" ou avec "Ordi\Compte", j'accède en authentification windows.

    Question 3 : pourquoi l'accès à mon compte windows est rejeté ?

    Maintenant, je fais le test avec le compte "sa" auquel j'ai mis un mot de passe. Et là, oh miracle, j’accède à SQL Server et mon test se passe correctement.
    Oui, entre temps, j'ai basculé de authentification windows à authentification Sql Server.

    Question 4 : est-ce au niveau de "management Studio" que je dois appliquer une modification ? Et si oui, laquelle

    En comparant ces trois comptes, j'ai trouvé une différence que je ne m'explique pas.
    Quand je fais "afficher les propriétés de connexions", à la ligne "protocole réseaux", pour mon compte, j'ai "tcpip" , tandis que pour les deux autres (ceux qui fonctionnent), j'ai "par défaut".
    J'ai cherché et je n'ai pas trouvé comme mettre "par défaut" à mon compte windows". D'ailleurs, je ne sais même pas si c'est le problème que je rencontre.

    Question 5 : comment identifier par une requête SQL le compte auquel je me connecte (à faire sous sqlcmd) ?

    Merci !
    @+

  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 002
    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 002
    Billets dans le blog
    6
    Par défaut
    2 réponses très rapides :

    d'abord votre serveur PHP tourne sous un autre compte système, de même que vous en tant qu'utilisateur, et bien entendu que SQL Server (le service). Il est donc normal que ce compte système ne soit pas autorisé à se connecter à SQL Server.
    Pour ce faire vous pouvez créer dans SQL Server un compte de connexion système recensant ce compte de service PHP et lui donner les privilèges adéquats

    ensuite pour identifier dans SQL Server le compte de connexion il suffit d’appeler la fonction normalisé du SQL SYSTEM_USER, par exemple en faisant la requête :
    Pour information, voici ce que dit la norme SQL à ce sujet :
    "
    9) The value specified by SYSTEM_USER is equal to an implementation-defined string that represents the operating system user who executed the SQL-client module that contains the SQL-statement whose execution caused the SYSTEM_USER <general value specification> to be evaluated.
    "


    Vous auriez aussi trouvé une définition de cette fonction dans mon ouvrage sur SQL que je vous ais proposé gratuitement et que vous avez refusé...
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 672
Taille : 77,8 Ko

    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
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut
    Salut à tous.

    Citation Envoyé par SQLPRO
    d'abord votre serveur PHP tourne sous un autre compte système, ...
    Un serveur sous Windows, c'est un service qui tourne en tâche de fond. Php n'est pas un serveur car il n'existe aucun service windows associé à lui.
    Php peut fonctionner en total indépendance (sans Apache), si vous l'utilisez en local sur votre ordinateur. Dans ce cas, on l'utilise en mode CLI, c'est-à-dire avec la console.

    Php est fréquemment utilisé en association avec Apache, dans le cas des pages web qui sont suffixées par ".php".
    Apache est un serveur web. La notion de compte n'existe pas. On utilise un nom de site pour accéder à Apache, qui, ce site, est associé à une adresse IP. Il peut y avoir trois types d'adresses IP :
    --> en local sur son ordinateur. Ce sont les adresses IP commençant par "127.x.y.z". C'est ce que l'on nomme un "loop-back".
    --> en LAN. Ce sont les adresses ip définies par la box, commençant par "192.168.x.y". Ces adresses sont celles de vos périphériques dans votre réseau local.
    --> en WAN. Ces adresses ne sont pas accessibles directement sur un serveur Web de type Apache. Il faut les rediriger par le NAT de la box vers le serveur Apache. Ce sont aussi des adresses IP de type "192.168.x.y" mais elles sont associés à l'ordinateur où se trouve le serveur Apache.
    Que ce soit en Php ou en Apache, la notion de compte n'existe pas !

    Citation Envoyé par SQLPRO
    ... de même que vous en tant qu'utilisateur, ...
    Quand je suis sur mon ordinateur, en effet, je m'identifie par un compte windows.
    Là encore, la notion de compte dépend de ce que vous faites. Cela dépend des autorisations (bouton droite, propriétés, puis sécurités) windows.
    Je peux indiquer dans le service windows ("SQL Server (sqlexpress)" : propriétés, puis onglets connexion) le nom du compte de connexion.
    Bien sûr, j'ai testé cela en mettant mon compte windows "Ordi\Compte", mais il m'identifie toujours comme étant "AUTORITE NT\Système".

    Citation Envoyé par SQLPRO
    ... et bien entendu que SQL Server (le service).
    Sous "Sql Server 2014 management studio", j'ai consulté le compte-rendu de mon problème. Voici le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Echec de l'ouverture de session de l'utilisateur 'ordi\compte'. Raison : tentative d'utilisation d'un nom de compte NT avec l'authentification SQL Server. [Client: <local machine>]
    Tout se passe comme si je n'avais pas le choix et que l'on m'impose "AUTORITE NT\Système".
    Je tiens à préciser que le problème est dans l'utilisation de l'authentification windows !

    Citation Envoyé par SQLPRO
    Il est donc normal que ce compte système ne soit pas autorisé à se connecter à SQL Server.
    C'est le problème que j'ai eu lors de mon premier accès à SQL Server. Je devais donner les autorisations à "AUTORITE NT\Système", pour consulter ma base "My_Base" depuis une procédure php, sous apache.

    Citation Envoyé par SQLPRO
    Pour ce faire vous pouvez créer dans SQL Server un compte de connexion système recensant ce compte de service PHP et lui donner les privilèges adéquats
    Dans le cas de l'authentification SQL Server, je n'ai aucun problème. J'ai créé un compte "artemus" avec mot de passe et j'accède bien à ma base de données, via ce compte, sans passer par "AUTORITE NT\Système", puisque je l'avais désactivé.

    Citation Envoyé par SQLPRO
    ensuite pour identifier dans SQL Server le compte de connexion il suffit d’appeler la fonction normalisé du SQL SYSTEM_USER, par exemple en faisant la requête
    Grâce à cette fonction, j'ai pu identifié plus facilement mon compte de connexion.
    J'ai même trouvé ceci et testé : "EXECUTE AS USER = 'Ordi\Compte';".
    Et là, j'accède bien à mon compte windows, mais je suis quand même obligé de passer par "AUTORITE NT\Système".

    En conclusion :
    --> je ne peux pas utiliser mon compte windows pour m'identifier à SQL Server en mode authentification windows.
    --> aucun problème avec un compte SQL Server en mode authentification SQL Server.

    @+

  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 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message

    En conclusion :
    --> je ne peux pas utiliser mon compte windows pour m'identifier à SQL Server en mode authentification windows.
    --> aucun problème avec un compte SQL Server en mode authentification SQL Server.

    @+
    Vous pouvez parfaitement utiliser votre compte système pour vous authentifier à SQL Server à condition que votre compte système ait été recensé comme compte de connexion dans SQL Server et doté des privilèges adéquats.
    Lisez l'article que j'ai écrit à ce sujet :
    http://blog.developpez.com/sqlpro/p7..._et_utilisateu

    En particulier dans votre cas et sans passer par l'IHM SSMS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE LOGIN [MonPC\Artemus]
       FROM WINDOWS;
    Suffit à créer la connexion au serveur SQL avec le privilège CONNECT.
    Vous ne pourrez pas y faire grand chose, juste naviguer dans les tables système de la base master (base centralisant les métadonnées des bases et utilisateur...) dans la limite des privilèges attribués à l'utilisateur PUBLIC...

    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
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut
    Salut SQLPRO.

    J'ai trouvé l'origine de mon problème. Cela ne concerne ni SQL Server, ni Php, ni Apache.

    Il s'agit d'une déclarative faite dans la gestion des services (services.msc) sous windows.
    Plus précisément dans l'instance WampServer, dans l'onglet "connexion".
    Par défaut, c'est le "Compte Système Local" qui est configuré.

    A ma connaissance, il y a quatre façon de déclarer le mode de connexion :

    1) "Compte Système Local" --> "AUTORITE NT\Système".
    2) "Service Local" --> "AUTORITE NT\SERVICE LOCAL".
    3) "Service Réseau" --> "AUTORITE NT\SERVICE RÉSEAU".
    4) ou bien en mettant un compte windows actif avec le mot de passe. Dans mon cas, je mets ".\compte" --> "ordi\compte".

    Dans les autres cas, ce sont des comptes windows désactivés, comme "invité".

    C'est la première fois que je rencontre un problème lié aux permissions, car dans MySql ou dans Firebird, j'accède par le compte du SGBDR.
    Je vais devoir approfondir cette question car j'aurai aimé obtenir le compte windows de connexions et non un compte par défaut.
    Mais je pense que l'on ne peut pas le faire sous windows.

    Sinon, j'ai une question concernant le gugus qui se trouve à gauche de la connexion dans "Management Studio".
    Pourquoi y-a-t-il à droite du gugus, une flèche vers le bas pour certaines connexions ?

    @+

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Sinon, j'ai une question concernant le gugus qui se trouve à gauche de la connexion dans "Management Studio".
    Pourquoi y-a-t-il à droite du gugus, une flèche vers le bas pour certaines connexions ?

    @+
    La flèche rouge vers le bas indique que l'item est désactivé. Vous trouverez cela à pas mal d'endroits.... par exemple si vous créer une tâche de l'Agent SQL et que vous ne l'activez pas.
    Certains objets nécessite d'être activés à la demande et un court instant pour leur utilisation, ne serait-ce que pour des raisons de sécurité.

    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/ * * * * *

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut
    Salut SQLPRO.

    Merci pour les explications.

    Je voudrais connaitre les bonnes pratiques en matière de connexion sur SQL Server.

    Hormis l'administrateur qui peut se connecter avec l'authentification windows, comment se connecte l'utilisateur lambda ?
    Par une connexion standard offrant des permissions basiques comme "select, insert, update, et delete" ?
    Par un compte SQL Server qui leur est propre ?

    @+

  8. #8
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Bonjour,

    Il y a 2 possibilités, mais à voir en fonction de la configuration de l'instance (clic droit sur l'instance/Properties/Security) et vous verrez les authentifications possible :

    Via un compte Windows (enregistré dans l'active directory) et à qui on attribue des droits sur chaque DB comme on le souhaite.
    Ou via un login SQL, qu'on donne un mot de passe, et on attribue les droits comme on veut (comme le compte Windows).

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut
    Salut janlouk.

    Citation Envoyé par Janlouk
    la configuration de l'instance (clic droit sur l'instance/Properties/Security) et vous verrez les authentifications possible
    Il n'y a pas d'onglet "sécurité" dans l'instance "SQL Server (SQLEXPRESS)", mais un onglet "connexion". Je suppose que c'est le même.

    Pour ce qui est des possibilité, j'ai indiqué cela dans mon post #5.

    Citation Envoyé par Janlouk
    Via un compte Windows (enregistré dans l'active directory) et à qui on attribue des droits sur chaque DB comme on le souhaite.
    Je suppose que vous parlez de "SQL Server 2014 Management studio", et ensuite de l'instance de SQLEXPRESS, puis de Sécurité et enfin connexion.
    J'ai bien un compte Windows de déclaré et il est actif.

    Mon problème ne se situe pas au niveau du compte windows ou du compte SQL server.
    Mais de faire le lien entre mon compte windows quand je me connecte à mon ordinateur et SQL Server sous WampServer.
    Quand je fais un test d'accès à SQL Server sous php, j'accède obligatoirement par le compte "AUTORITE NT\système". Pourquoi ?
    D'une part, je n'ai précisé aucun compte et mot de passe dans la connexion en PDO à ma base de données.
    De plus, l'instance WampApache a été déclaré avec le compte local système. D'où le compte"AUTORITE NT\système".

    J'aimerai savoir s'il est possible en changeant de compte Windows sur mon ordinateur de pourvoir accéder à SQL Server avec ce compte, sans le préciser dans PDO ?
    Je pense que cela n'est pas possible.
    Posséder un compte windows et y accéder par l'authentification windows à SQL Server n'est possible que si l'instance WampApache utilise se compte.
    Dans les autres cas, je suis obligé d'utiliser le compte de l'instance WampApache, ce qui ne m'arrange pas du tout.

    Dans les autres cas, c'est-à-dire mettre mon compte Windows dans l'instance WampApache, ou accéder via un compte Sql Server ne me pose aucun problème.

    Comme je débute avec ce SGBDR, il y a peut-être quelque chose que je n'ai pas compris.

    @+

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Votre serveur SQL est installé sur le même poste ou vous voulez accéder ?

    Si oui, il suffit de créer la connexion SQL et de lui attribuer les privilèges

    Si non, il faut avoir un domaine et que ce compte soit un compte de domaine puis créer la connexion SQL et de lui attribuer les privilèges

    Ensuite il vous faudra créer un utilisateur mappé à ce compte dans chacune des bases que vous voulez exploitez...
    N'oubliez pas que SQL Server est multi base et que chaque base est étanche au niveau de la sécurité.

    Pour créer la connexion SQL, vous pouvez faire la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USE master;  --> on se place dans le contexte de la base système "master"
    CREATE LOGIN [MonPC\MonNom] 
       FROM WINDOWS;
    GO
    Si vous voulez que la connexion soit immédiatement dirigée vers la bonne base (que nous appellerons MA_BASE par exemple), vous pouvez ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    USE master;  --> on se place dans le contexte de la base système "master"
    ALTER LOGIN [MonPC\MonNom] 
       WITH DEFAULT_DATABASE=MA_BASE
    Pour créer un utilisateur dans une base particulière, lié à ce compte, vous pouvez faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USE MA_BASE;  --> on se place dans le contexte de la base que l'on veut exploiter
    CREATE USER USER_MonNom
       FROM LOGIN [HPZFRED\FB]
    GO
    Pour attribuer des privilèges sur l'ensemble des objets de la base, vous pouvez faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    USE MA_BASE;  --> on se place dans le contexte de la base que l'on veut exploiter
    GRANT SELECT,
          INSERT, 
    	  UPDATE, 
    	  DELETE, 
    	  EXECUTE, 
    	  REFERENCES
       TO USER_MonNom
    GO
    On peut bien entendu faire des choses beaucoup plus fines pour la gestion des privilèges en descendant au niveau des schémas SQL ou des objets ou encore en utilisant des rôles créés de toute pièces ou prédéfins.

    Exemple, attribution du privilège de modifier tout objet du schéma SQL dbo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USE MA_BASE;  --> on se place dans le contexte de la base que l'on veut exploiter
    GRANT ALTER 
       ON SCHEMA::dbo 
       TO USER_MonNom
    Encore une fois lisez l'article résumant les choses, article dont je vous ais déjà proposé la lecture :
    http://blog.developpez.com/sqlpro/p7..._et_utilisateu

    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/ * * * * *

  11. #11
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut
    Salut SQLPRO.

    Je n'ai aucun problème pour déclarer un compte SQL Server, soit en passant par l'outil "SQL Server 2014 Management Studio", soit en ligne de commande.
    Tout ce que vous m'avez donné comme exemple pour déclarer un compte SQL Server ou pour donner des permissions sur une base de données, fonctionnent parfaitement.

    Mon problème se situe dans les accès aux comptes windows avec authentification !
    Je vais essayer de donner un maximum d'explication sur ce que je ne sais pas faire.

    Citation Envoyé par SQLPRO
    Votre serveur SQL est installé sur le même poste ou vous voulez accéder ?
    SQL Server est installé sur le même ordinateur. En fait, je n'ai qu'un seul ordinateur. SQL Server a été installé avec mon compte windows administrateur.

    L'instance "SQL Server (SQLEXPRESS)" a comme privilège (onglet connexion) compte système locale.
    L'instance "WampApache" a comme privilège (onglet connexion) mon compte windows administrateur.

    Je fais des tests sous apache, dans des programmes écrits en php, et j'accède bien à ma table dans ma base de données.
    Ce qui me pose problème, c'est l'accès par defaut à SQL Server lors de l'authentification windows.
    Ce que j'entends par défaut, c'est un accès où je ne précise pas le compte dans ma connexion à SQL Server.

    Citation Envoyé par SQLPRO
    Si oui, il suffit de créer la connexion SQL et de lui attribuer les privilèges
    Dans mon cas, ce n'est pas l'instance "SQL Server (SQLEXPRESS) qui me donne les permissions mais l'instance WampApache.

    Citation Envoyé par SQLPRO
    Si non, il faut avoir un domaine et que ce compte soit un compte de domaine puis créer la connexion SQL et de lui attribuer les privilèges
    Je suppose que par "domaine", je dois comprendre "un compte avec authentification windows". C'est dans ce cas là, que j'ai un problème.
    Voici les trois cas que je recontre :

    1) sur mon ordinateur, je suis dans une session avec mon compte windows administrateur.
    J'accède depuis Apache. Je ne précise aucun compte d'accès SQL Server, et il me met le compte windows administrateur comme compte SQL Server.
    C'est-à-dire que j'accède avec l'authentification Windows à SQL Server. Dans ce cas de figure, cela ne me pose aucun problème !
    Mon compte authentification windows existe bien et j'accède bien à ma base et à mes tables de tests.
    Si j'ai bien compris, le compte d'accès par défaut est celui qui est précisé dans l'instance WampApache.
    Comme je dois en mettre un, je me retrouve obligatoirement avec ce compte pour l'authentification windows.

    2) Maintenant, je suis dans une autre session avec mon compte windows utilisateur.
    J'accède depuis Apache. Je ne précise aucun compte SQL Server, et il me met le compte windows administrateur comme compte SQL Server.
    Cela me dérange car j'aurai voulu obtenir comme authentification windows à SQL Server, mon compte windows utilisateur.
    Si j'ai le compte windows administrateur, c'est à cause de la déclarative que j'ai fait dans l'instance WampApache. (Cf cas 1).
    Je me demande même s'il est possible d'accéder à mon compte windows utilisateur par défaut.

    3) Si je précise dans ma connexion à SQL Server, un compte SQL Server (donc sans passer par l'authentification windows), tout fonctionne correctement.
    J'accède correctement à ce compte et je n'ai aucun problème de permission.

    Comme vous avez dû le comprendre, mon problème se situe dans le cas 2).
    Après quelques recherches, je n'ai trouvé aucune solution. Je pense même que cela est impossible à faire.

    Je tiens à préciser que j'aimerai connaitre la solution du cas 2) et ce n'est pas cela qui m'empêche de travailler.
    J'espère que mes explications vont permettre d'éclaircir et de résoudre le cas 2).
    Sinon, cela revient à ne pas pouvoir utiliser les comptes avec authentification windows, ce qui est dommage.

    --> https://msdn.microsoft.com/fr-fr/lib...=sql.120).aspx

    @+

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    SQL Server a été installé avec mon compte windows administrateur.
    Cela n'a aucune importance. Cela sert à vous autoriser ou non de faire l’installation.
    Chaque service SQL Server aura un compte d'utilisateur particulier sous lequel il tourne.
    Pour votre instance c'est donc bien le compte système local.

    Ce qui me pose problème, c'est l'accès par défaut à SQL Server lors de l'authentification windows.
    Depuis apache, c'est donc sous le compte administrateur que le serveur Apache veut pénétrer dans le serveur SQL. Hors SQL Server, par sécurité n'autorise pas les membres du groupe Adminsitrateur de Windows.
    Si vous voulez que le compte local administrateur puisse être reconnu de SQL Server il faut lui donner la possibilité de se connecter et lui mettre les privilèges adéquat.

    Mettons que votre machine s'appelle MonPC et donc votre compte administrateur va s'appeler MonPC\Administrateur, alors la création de la connexion SQL pour ce compte se fera par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    USE master
    GO
    CREATE LOGIN [MonPC\Administrateur] 
       FROM WINDOWS;
    GO
    La mise en place du privilège permettant de tout faireau niveau du serveur SQL est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRANT CONTROL 
       ON SERVER 
       TO [MonPC\Administrateur];
    À partir de ce moment là, votre serveur Apache aura tous les droits.....

    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/ * * * * *

  13. #13
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 913
    Par défaut
    Salut SQLPRO.

    Citation Envoyé par SQLPRO
    Si vous voulez que le compte local administrateur puisse être reconnu de SQL Server il faut lui donner la possibilité de se connecter et lui mettre les privilèges adéquat.
    Il ne s'agit pas de cela. Vous n'avez pas compris mon problème.

    Mon problème est que l'instance WampApache m'impose le compte par défaut sur lequel je vais travailler.
    Or j'aurai voulu comme compte windows, non pas celui d'apache, mais celui de ma session windows.
    J'ai cherché sur le net, et je pense (???) qu'il n'existe pas de solution à cela.
    Car l'instance WampApache impose un compte d'accès par défaut et je n'ai pas le choix.

    Tant pis. Cela ne me dérange pas énormément car je peux accéder à ma base de données en spécifiant un compte SQL Server.

    Merci quand même de votre participation !

    @+

  14. #14
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut SQLPRO.


    Il ne s'agit pas de cela. Vous n'avez pas compris mon problème.

    Mon problème est que l'instance WampApache m'impose le compte par défaut sur lequel je vais travailler.
    Or j'aurai voulu comme compte windows, non pas celui d'apache, mais celui de ma session windows.
    Vous vous êtes un utilisateur et lui c'est un service... Vous pouvez créer un compte de service, mais pas utiliser le compte d'un utilisateur pour un service ![/QUOTE]

    J'ai cherché sur le net, et je pense (???) qu'il n'existe pas de solution à cela.
    Car l'instance WampApache impose un compte d'accès par défaut et je n'ai pas le choix.

    [/QUOTE]Rien ne vous interdit de créer le compte de service de votre choix à condition d'y mettre les droits adéquats....

    Tant pis. Cela ne me dérange pas énormément car je peux accéder à ma base de données en spécifiant un compte SQL Server.

    Merci quand même de votre participation !

    @+
    Pas de quoi !

    Vous avez remarqué que je n'étais pas toujours patient !

    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/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

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