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 :

[SQL Server] toutes mes tables se créent en dbo


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Par défaut [SQL Server] toutes mes tables se créent en dbo
    Bonjour à tous,

    je vous explique mon petit problème, j'ai un serveur SQL Server 2000 sur lequel j'ai remonté une base d'un de mes logiciels.
    Je n'ai pas installé le serveur moi même cependant je sais qu'il est en SP4 et la base en compatibilité 80.

    mon problème est simple j'ai deux utilisateurs principaux sur cette base un qui est dbo et l'autre qui est USER.
    la partie logicielle créé des tables pseudo-temporaires avec USER qui sont donc normalement créé sous cet user.
    Cependant sur ce serveur, les dites tables sont créés en dbo.
    De même lorsque je me connecte au serveur avec le compte USER et que je fais un create table bidon çà fait pareil les tables sont créés en dbo

    Bien évidemment si je me connecte avec l'autre compte et que je fais le même create table, la table est en dbo (bien entendu je la drop entre temps).

    Bref existe-t-il une option directe ou indirecte pour dire à sql server de créer toutes les tables en dbo ?

    çà parait un peu incongru mais j'ai cherché sur internet je n'ai rien trouvé.
    Merci d'avance à vous tous

  2. #2
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Par défaut
    tu peux le forcer avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table user.matable(monchamps int) ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Par défaut
    Merci oadin,
    çà je le savais déjà, mais je ne vais pas modifier toutes mes créations de table 'temporaire', il y a forcément un paramètre différent entre ce serveur et tous les autres et je n'arrive pas à déterminer lequel.

  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 010
    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 010
    Billets dans le blog
    6
    Par défaut
    D'abord et contrairement à ce que vous croyez et ce qui a été dit, dbo ou user ne représente pas dans ce cas un utilisateur mais un SCHEMA SQL.

    En effet selon la norme SQL (et SQL est un langage fortement normatif) il n'est pas possible de créer une table, une vue, une PS directement au niveau de la base, il faut passer par un schema SQL. La base de données peut contenir autant de schema SQL que l'on veut à condition de les créer.
    Un schema SQL est en fait l'équivalent d'une bibliothèque ou d'un espace de nom. Il ne peut cepandant y avoir qu'un seul niveau de schéma dans une base SQL.

    Tout schéma est créé sous le compte d'un propriétaire. L'inconvénient dans SQL Server 2000 est que le schéma a le même nom que l'utilisateur qui en est le propriétaire. D'ou la confusion. Le schéma par défaut dans SQL Server est dbo. Mais rien ne vous empêche d'utiliser d'autres schema ou d'ssocier votre utilisateur à un schéma par défaut différent de dbo.

    Les choses sont notablement mieux gérées dans la version 2005 ou l'indépendance schéma / utilisateur est totale.

    Maintenant il est indispensable de préfixer tous vos objets par le nom du schéma. En effet en cas d'absence de préfixage par le schéma, SQL Server doit retrouver le schéma par défaut et cela constitue une notable perte de temps donc de performance.
    Sur SQL Server 2005, cette perte a été estimée à 30 % sur des cas extrême lorsqu'il y a de nombreux schéma et aucun préfixage.

    Pour en savoir plus sur la norme SQL et la notion de schéma SQL, je vous invite à consulter mon livre...

    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Par défaut
    Frederic,
    merci d'avoir pris le temps de me répondre je respecte tout à fait votre savoir pour en avoir bénéficié lors d'une de vos sessions, cependant çà ne répond en rien à ma question.
    Je vous assure que je suis tout à fait au courant des schéma, j'avais employé le terme utilisateur pour ne pas me perdre en conjecture.
    bref le souci n'est pas là, l'appli dont je parle est un progiciel qui a 15 ans, il est déployé chez plus de 4000 utilisateurs et en fin de vie.
    Il est donc hors de question que je revienne sur les 200Mo de scripts SQL qui le compose.

    j'attends donc une réponse simple à la question suivante :
    si je créé une base BASE avec db_owner ayant pour login ADMIN
    puis je lui ajoute un utilisateur (avec un login TOTO) et que je me connecte avec le dit TOTO.
    Pourquoi sur certains serveur SQL si je fais un create table, la table à pour schéma TOTO et pourquoi sur d'autre elle est dbo (sachant que bien entendu le db_owner est toujours ADMIN sur les deux serveurs)?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Par défaut
    j'ai cherché encore cet après midi et je me suis débrouillé tout seul comme un grand
    en fait lorsqu'ils ont créé mon utilisateur USER ils lui ont mis le rôle sysadmin sur le serveur

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

Discussions similaires

  1. [SQL] Créer un identifiant dans toutes mes tables
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/03/2008, 18h36
  2. [SQL] Faire un DROP de toutes mes tables
    Par emmy99 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/03/2008, 13h25
  3. [Sql Server] Renommer une table
    Par TekP@f dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/07/2005, 10h07
  4. [Sql Server/MSDE][Create Table] limite int identity
    Par joefou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/06/2005, 09h45
  5. MS SQL SERVER et les tables temporaires
    Par beb_has_return dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/02/2005, 14h36

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