Dans Microsoft SQL Server, les administrateurs de base de données ajoutent des identifiants de connexion à l'instance SQL Server et une correspondance est établie entre ces identifiants de connexion et les utilisateurs dans des bases de données individuelles de l'instance SQL Server. Les utilisateurs de bases de données qui doivent créer des tables et des classes d'entités doivent bénéficier des privilèges nécessaires pour créer ces objets dans la base de données et posséder une structure dans laquelle ils peuvent les créer. Lorsque vous utilisez ArcGIS, cette structure doit avoir le même nom que l'utilisateur de la base de données.
Pour effectuer les opérations suivantes, vous pouvez utiliser l'outil Créer un utilisateur de base de données ou un script.
- Créer ou ajouter un identifiant de connexion à l'instance SQL Server
- Créer un utilisateur associé à l'identifiant de connexion spécifié
- Créer une structure correspondante pour l'utilisateur dans la base de données spécifiée
- Accorder des privilèges à l'utilisateur pour créer des tables, des classes d'entités et des vues dans la base de données spécifiée
Ajouter un utilisateur qui peut créer des données
Vous pouvez exécuter l'outil Créer un utilisateur de base de données à partir d'ArcGIS for Desktop ou appeler l'outil dans un script Python pour créer un utilisateur de base de données pouvant créer des tables, des classes d'entités et des vues.
Vous devez être connecté à la base de données via un identifiant de connexion qui détient des privilèges sysadmin sur l'instance SQL Server pour exécuter l'outil Créer un utilisateur de base de données.
Pour créer un utilisateur de base de données pour un identifiant Windows, ce dernier doit exister pour que vous puissiez exécuter l'outil.
Utiliser l'outil Créer un utilisateur de base de données
- Démarrez ArcMap ou ArcCatalog.
- Connectez-vous à la base de données ou à la géodatabase avec un identifiant de connexion doté de privilèges sysadmin dans l'instance SQL Server.
- Ouvrez l'outil Créer un utilisateur de base de données.
Il se trouve dans le jeu d'outils Administration de géodatabase de la boîte à outils Gestion des données.
- Identifiez la connexion à la base de données pour la Connexion à la base de données en entrée.
- Créez un identifiant de connexion authentifié par SQL Server ou utilisez un identifiant de connexion authentifié par Windows existant.
- Laissez l'option Créer un utilisateur authentifié par le système d'exploitation désélectionnée pour créer un identifiant de connexion authentifié par SQL Server. Par défaut, les instances SQL Server utilisent uniquement l'authentification Windows. Si votre instance n'est pas configurée pour utiliser SQL Server et l'authentification Windows, vous ne pourrez pas choisir d'identifiant de connexion authentifié par la base de données.
- Sélectionnez l'option Créer un utilisateur authentifié par le système d'exploitation pour utiliser un identifiant de connexion authentifié par Windows.
- Attribuez un nom à l'utilisateur de la base de données que l'outil va créer.
Si vous choisissez de créer un identifiant de connexion authentifié par SQL Server, le nom qui apparaît ici sera également attribué à l'identifiant de connexion.
- Saisissez un mot de passe pour l'utilisateur de la base de données.
- Si vous disposez déjà d'un rôle de base de données auquel vous souhaitez ajouter cet utilisateur, indiquez le rôle.
- Cliquez sur OK pour exécuter l'outil.
Exécuter un script Python
Pour générer un script de création d'utilisateur, procédez comme suit :
- Créez un fichier texte sur l'ordinateur d'un client ArcGIS, puis copiez-y le script suivant.
""" Name: create_database_user.py Description: Provide connection information to a database user. Type create_database_user.py -h or create_database_user.py --help for usage Author: Esri """ # Import system modules import arcpy import os import optparse import sys # Define usage and version parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for 10.1 release") #Define help and options parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQLSERVER', 'ORACLE', 'POSTGRESQL', ''], default="", help="Type of enterprise DBMS: SQLSERVER, ORACLE, or POSTGRESQL.") parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name") parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name: Not required for Oracle") parser.add_option ("--auth", dest="Account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive): DATABASE_AUTH, OPERATING_SYSTEM_AUTH. Default=DATABASE_AUTH") parser.add_option ("-U", dest="Dbms_admin", type="string", default="", help="DBMS administrator user") parser.add_option ("-P", dest="Dbms_admin_pwd", type="string", default="", help="DBMS administrator password") parser.add_option ("--utype", dest="user_type", type ="choice", choices=['DATABASE_USER', 'OPERATING_SYSTEM_USER'], default='DATABASE_USER', help="Authentication type options (case-sensitive): DATABASE_USER, OPERATING_SYSTEM_USER. Default=DATABASE_USER") parser.add_option ("-u", dest="dbuser", type="string", default="", help="database user name") parser.add_option ("-p", dest="dbuser_pwd", type="string", default="", help="database user password") parser.add_option ("-r", dest="role", type="string", default="", help="role to be granted to the user") parser.add_option ("-t", dest="Tablespace", type="string", default="", help="Tablespace name") # Check if value entered for option try: (options, args) = parser.parse_args() #Check if no system arguments (options) entered if len(sys.argv) == 1: print "%s: error: %s\n" % (sys.argv[0], "No command options given") parser.print_help() sys.exit(3) #Usage parameters for spatial database connection database_type = options.Database_type.upper() instance = options.Instance database = options.Database.lower() account_authentication = options.Account_authentication.upper() dbms_admin = options.Dbms_admin dbms_admin_pwd = options.Dbms_admin_pwd dbuser = options.dbuser dbuser_pwd = options.dbuser_pwd tablespace = options.Tablespace user_type = options.user_type role = options.role if (database_type == "SQLSERVER"): database_type = "SQL_SERVER" if( database_type ==""): print(" \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified.")) parser.print_help() sys.exit(3) if(database_type == "SQL_SERVER"): if( account_authentication == "DATABASE_AUTH" and dbms_admin == ""): print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified with database authentication")) sys.exit(3) if( account_authentication == "OPERATING_SYSTEM_AUTH" and dbms_admin != ""): print("\nWarning: %s\n" % ("Ignoring DBMS administrator specified when using operating system authentication...")) else: if( dbuser.lower() == ""): print("\n%s: error: %s\n" % (sys.argv[0], "Database user must be specified.")) sys.exit(3) if( dbms_admin == ""): print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified!")) sys.exit(3) if ( user_type == "DATABASE_USER" and (dbuser =="" or dbuser_pwd =="")): print(" \n%s: error: \n%s\n" % (sys.argv[0], "To create database authenticated user, user name and password must be specified!")) parser.print_help() sys.exit(3) # Get the current product license product_license=arcpy.ProductInfo() # Checks required license level if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE': print("\n" + product_license + " license found!" + " Creating a user in an enterprise geodatabase or database requires an ArcGIS for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for Server license.") sys.exit("Re-authorize ArcGIS before creating a database user.") else: print("\n" + product_license + " license available! Continuing to create...") arcpy.AddMessage("+++++++++") # Local variables instance_temp = instance.replace("\\","_") instance_temp = instance_temp.replace("/","_") instance_temp = instance_temp.replace(":","_") Conn_File_NameT = instance_temp + "_" + database + "_" + dbms_admin if os.environ.get("TEMP") == None: temp = "c:\\temp" else: temp = os.environ.get("TEMP") if os.environ.get("TMP") == None: temp = "/usr/tmp" else: temp = os.environ.get("TMP") Connection_File_Name = Conn_File_NameT + ".sde" Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde" # Check for the .sde file and delete it if present arcpy.env.overwriteOutput=True if os.path.exists(Connection_File_Name_full_path): os.remove(Connection_File_Name_full_path) try: print("\nCreating Database Connection File...\n") # Process: Create Database Connection File... # Usage: out_file_location, out_file_name, DBMS_TYPE, instnace, database, account_authentication, username, password, save_username_password(must be true) #arcpy.CreateDatabaseConnection_management(temp , Connection_File_Name, database_type, instance, database, account_authentication, dbms_admin, dbms_admin_pwd, "TRUE") arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=dbms_admin, password=dbms_admin_pwd, save_user_pass="TRUE") for i in range(arcpy.GetMessageCount()): if "000565" in arcpy.GetMessage(i): #Check if database connection was successful arcpy.AddReturnMessage(i) arcpy.AddMessage("\n+++++++++") arcpy.AddMessage("Exiting!!") arcpy.AddMessage("+++++++++\n") sys.exit(3) else: arcpy.AddReturnMessage(i) arcpy.AddMessage("+++++++++\n") print("Creating database user...\n") arcpy.CreateDatabaseUser_management(input_workspace=Connection_File_Name_full_path, user_authentication_type=user_type, user_name=dbuser, user_password=dbuser_pwd, role=role, tablespace_name=tablespace) for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) arcpy.AddMessage("+++++++++\n") except: for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) #Check if no value entered for option except SystemExit as e: if e.code == 2: parser.usage = "" print("\n") parser.print_help() parser.exit(2)
Vous pouvez exécuter le script à partir d'un ordinateur sur lequel ArcGIS for Desktop (Standard ou Advanced), ArcGIS for Server (Standard ou Advanced) ou ArcGIS Engine et l'extension Geodatabase Update sont installés.
- Enregistrez le fichier avec l'extension .py.
- Exécutez le script en indiquant des options et des informations propres à votre instance SQL Server et à l'utilisateur que vous voulez créer.
Dans l'exemple suivant, le nom du script est create_database_user.py. Un identifiant de connexion authentifié par SQL Server (gisd_owner) est créé dans l'instance SQL Server ssi5. Un utilisateur et une structure correspondants sont ensuite créés dans la base de données gisdata. L'utilisateur n'est pas ajouté à un rôle.
create_database_user.py --DBMS SQL_SERVER -i ssi5 -D gisdata --auth DATABASE_AUTH -U sa -P !nocopy! --utype DATABASE_USER -u gisd_owner -p T3mpPass
Votre base de données contient désormais un utilisateur qui peut créer des tables.
Plusieurs méthodes permettent au propriétaire de données de créer des tables dans la base de données ou la géodatabase. Pour plus d'informations sur la création de tables à l'aide d'ArcGIS, reportez-vous à la rubrique Vue d'ensemble de l'ajout de jeux de données à une géodatabase.
Lorsque les jeux de données ont été créés, le propriétaire des données peut accorder aux autres utilisateurs des privilèges sur les jeux de données. Reportez-vous à la rubrique Octroyer et supprimer des privilèges sur le jeu de données pour obtenir des instructions.
Créer des identifiants de connexion et des utilisateurs avec des outils SQL Server
Pour créer un utilisateur possédant des privilèges différents de ceux qui ont été octroyés par l'outil Créer un utilisateur de base de données ou auquel aucun privilège n'a été accordé directement, utilisez des outils SQL Server. Voici certains points à prendre en compte lorsque vous créez vos propres identifiants de connexion et utilisateurs à utiliser avec ArcGIS :
- Tous les utilisateurs d'une base de données qui vont créer des données doivent posséder une structure dans la base de données. Le nom de cette structure et celui de l'utilisateur doivent être identiques.
- Vous pouvez accorder un accès à SQL Server à un groupe Windows plutôt qu'à des identifiants Windows individuels pour simplifier la création et la gestion des identifiants de connexion. Tous les membres du groupe Windows peuvent se connecter à SQL Server. Les privilèges accordés à un groupe sur le serveur, la base de données et les jeux de données sont automatiquement appliqués à chaque membre du groupe. Toutefois, vous ne pouvez pas créer une structure unique pour stocker les données créées par les membres de groupe. Chaque membre du groupe qui crée des données dans la géodatabase doit disposer de sa propre structure pour stocker les données. SQL Server crée un utilisateur et une structure dans la base de données lorsqu'un membre du groupe génère des données pour la première fois. Cet événement est automatique ; ne créez aucune structure et aucun utilisateur manuellement.
Pour savoir comment utiliser les outils SQL Server pour créer des identifiants de connexion, des utilisateurs et des structures, consultez la documentation Microsoft SQL Server.