Los administradores de bases de datos de Oracle crean cuentas de usuario en la instancia de Oracle y asignan el almacenamiento de estas cuentas (espacios de tablas) y los privilegios.
El administrador de base de datos (usuario del sistema) puede usar herramientas de Oracle para crear usuarios, un espacio de tablas predeterminado para el usuario y otorgar privilegios para crear objetos de base de datos.
Como alternativa, el administrador de base de datos puede usar la herramienta Crear usuario de base de datos o un script desde un cliente de ArcGIS para crear un usuario para convertirlo en propietario de datos. Esta herramienta requiere una licencia Standard o Advanced para ejecutarla. A los usuarios de la base de datos creados con esta herramienta se les otorgan los privilegios siguientes:
- CREATE SESSION
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TRIGGER
- CREATE VIEW
- SELECT ON DBA_ROLES
Agregar un usuario que puede crear objetos de base de datos
Puede ejecutar la herramienta Crear usuario de base de datos desde ArcGIS Desktop o invocarla en un script de Python para crear un usuario de la base de datos que puede crear tablas, clases de entidad, vistas, desencadenadores y secuencias.
Debe conectarse a la base de datos como usuario del sistema de Oracle para ejecutar la herramienta Crear usuario de base de datos.
Utilice la herramienta Crear usuario de base de datos
- Conéctese a la base de datos o geodatabase como usuario del sistema.
- Abra la herramienta Crear usuario de base de datos.
La herramienta está en el conjunto de herramientas Administración de geodatabase de la caja de herramientas Administración de datos.
- Especifique la conexión de base de datos de Conexión de la base de datos de entrada.
- Escriba un nombre para el usuario y esquema que la herramienta creará.
- Escriba una contraseña para el usuario de la base de datos.
- Si ya tiene un rol del grupo del que desea que este usuario sea miembro, especifique dicho rol.
- Escriba el nombre del espacio de tabla que desea establecer como el predeterminado del usuario. Si no existe el espacio de tablas, la herramienta lo creará en la ubicación de almacenamiento predeterminada de Oracle. La herramienta crea un espacio de tabla de 400 MB.
Si no se especifica un espacio de tablas, se usa el espacio de tabla predeterminado de Oracle.
- Haga clic en Aceptar (ArcMap) o Ejecutar (ArcGIS Pro).
Ejecutar un script de Python
Para crear usuarios mediante una secuencia de comandos, siga estos pasos:
- Cree un archivo de texto en un equipo cliente de ArcGIS y copie en él la secuencia de comandos siguiente.
""" 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)
- Guarde el archivo con una extensión .py.
- Ejecute el script; proporcione opciones e información específica de su base de datos Oracle y el usuario que desea crear.
En el siguiente ejemplo ejecutado desde un servidor de Microsoft Windows, el nombre del script es create_database_user.py. Un usuario autenticado de la base de datos (geodatos) se crea en la base de datos con la cadena de conexión de Oracle, dbsrv/orcl. El usuario no se agrega a un rol.
create_database_user.py --DBMS ORACLE -i dbsrv/orcl -U sys -P $hHhH --utype DATABASE_USER -u geodata -p 0wn1t
Este es un ejemplo de la ejecución del script en un equipo con Linux:
./create_database_user.py --DBMS ORACLE -i dbsrv/orcl -U sys -P $hHhH --utype DATABASE_USER -u geodata -p 0wn1t
Sugerencia:
Introduzca -h o --help en la ventana de comando para obtener ayuda con la sintaxis.
La base de datos ahora tiene un usuario que puede crear tablas.
Una vez que los datasets existen, el propietario puede otorgar privilegios SELECT sobre los datasets a los usuarios que necesitan ver los datos y privilegios SELECT, INSERT, UPDATE y DELETE sobre los datasets a usuarios que necesitan editar los datos. Consulte Otorgar y revocar privilegios sobre datasets para obtener instrucciones.
Crear usuarios con herramientas de Oracle
Si desea crear un usuario de base de datos con privilegios distintos de los otorgados por la herramienta Crear usuario de base de datos o sin privilegios otorgados directamente al usuario, puede usar las herramientas de Oracle para hacerlo.
Para obtener instrucciones sobre el uso de las herramientas de Oracle para crear usuarios de base de datos, consulte la documentación de Oracle.