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 qui possède des données. Les utilisateurs de base de données 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 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 un client ArcGIS Desktop.
- 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 (ArcMap) ou sur Exécuter (ArcGIS Pro).
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 """ # 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 Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS 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 Desktop (Standard ou Advanced), ArcGIS Server (Standard ou Advanced) ou ArcGIS Engine et l'extension Geodatabase Update est installé.
- 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 de base de données 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.
Pour savoir comment utiliser les outils Oracle pour créer des utilisateurs de bases de données, consultez la documentation Oracle.