Les administrateurs de bases de données Oracle créent des comptes utilisateurs dans l'instance Oracle et leur affectent du stockage (tablespaces) et des privilèges.
L'administrateur de base de données (utilisateur sys) peut utiliser des outils Oracle pour créer des utilisateurs et un tablespace par défaut pour l'utilisateur, et accorder des privilèges pour créer des objets de base de données. L'administrateur de base de données peut également utiliser l'outil Créer un utilisateur de base de données ou un script d'un client ArcGIS client pour créer un utilisateur propriétaire de données. Les utilisateurs créés avec cet outil détiennent les privilèges suivants :
- CREATE SESSION
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TRIGGER
- CREATE VIEW
- SELECT ON DBA_ROLES
Ajouter un utilisateur qui peut créer des objets de base de 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, des vues, des déclencheurs et des séquences.
Vous devez être connecté à la base de données en tant qu'utilisateur sys d'Oracle pour exécuter l'outil Créer un utilisateur de base de données.
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 en tant qu'utilisateur sys.
- 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.
- Attribuez un nom à l'utilisateur et à la structure que l'outil va créer.
- Saisissez un mot de passe pour l'utilisateur de la base de données.
- Si vous disposez déjà d'un rôle de groupe auquel vous souhaitez ajouter cet utilisateur en tant que membre, indiquez le rôle.
- Saisissez le nom du tablespace par défaut de l'utilisateur. Si le tablespace n'existe pas déjà, il sera créé par l'outil dans l'emplacement de stockage par défaut d'Oracle. L'outil crée un tablespace de 400 Mo.
Si vous ne spécifiez aucun tablespace, le tablespace par défaut d'Oracle est utilisé.
- 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 un ordinateur sur lequel le client ArcGIS est installé, 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 les options et les informations propres à votre base de données Oracle et à l'utilisateur que vous voulez créer.
Dans l'exemple suivant, exécuté sur un serveur Windows, le nom du script est create_database_user.py. Un utilisateur authentifié de base de données (géodonnées) est créé dans la base de données à l'aide de la chaîne de connexion Oracle dbsrv/orcl. L'utilisateur n'est pas ajouté à un rôle.
create_database_user.py --DBMS ORACLE -i dbsrv/orcl -U sys -P $hHhH --utype DATABASE_USER -u geodata -p 0wn1t
Voici un exemple d'exécution du script sur un ordinateur Linux :
./create_database_user.py --DBMS ORACLE -i dbsrv/orcl -U sys -P $hHhH --utype DATABASE_USER -u geodata -p 0wn1t
Votre base de données contient désormais un utilisateur qui peut créer des tables.
Plusieurs méthodes permettent à cet utilisateur 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 existent, le propriétaire peut accorder des privilèges SELECT sur ces derniers aux utilisateurs qui doivent afficher les données, et des privilèges SELECT, INSERT, UPDATE et DELETE sur les jeux de données aux utilisateurs devant mettre à jour les 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 utilisateurs avec des outils Oracle
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 Oracle. Voici certains points à prendre en compte lorsque vous créez vos propres comptes à utiliser avec ArcGIS :
- Dans Oracle, les géodatabases utilisent des tables de fichiers journaux partagés pour assurer la maintenance des listes d'enregistrements sélectionnés. Ces types de tables de fichiers journaux exigent de tous les utilisateurs qu'ils détiennent les privilèges les autorisant à créer des tables. Pour créer des utilisateurs qui ne peuvent pas créer des tables dans la géodatabase, vous devez modifier les paramètres de la table de fichiers journaux pour qu'elle utilise des groupes de tables de fichiers journaux appartenant à l'utilisateur sde. Pour plus d'informations sur les groupes de fichiers journaux, reportez-vous à la rubrique Options des tables de fichiers journaux pour les géodatabases dans Oracle. Pour modifier les paramètres des tables de fichiers journaux, suivez les instructions de la rubrique Modifier les paramètres des tables de fichiers journaux.
- Si vous choisissez d'utiliser l'authentification du système d'exploitation avec une base de données Oracle, vous devez définir des paramètres spécifiques sur le compte utilisateur et dans les fichiers de configuration de l'instance Oracle pour utiliser cette authentification. Consultez votre documentation Oracle pour connaître les étapes spécifiques nécessaires à votre version de base de données.
Pour savoir comment utiliser les outils Oracle pour créer des utilisateurs de bases de données, consultez la documentation Oracle.