Crear usuario de base de datos (Administración de datos)

Resumen

Crea un usuario de base de datos con los privilegios suficientes para crear datos en la base de datos.

Uso

  • Esta herramienta se puede utilizar con Oracle, Microsoft SQL Server o PostgreSQL. Esta herramienta no es compatible con servicios de base de datos basados en la nube.

  • Para Oracle y SQL Server, si ya existe un inicio de sesión del sistema operativo, esta herramienta puede agregar ese inicio de sesión como un usuario a la base de datos especificada, pero el nombre de inicio de sesión y el nombre de usuario deben coincidir.

  • No puede crear un usuario de base de datos para un grupo de Microsoft Windows.

  • Esta herramienta crea tablas de archivos de registro para el usuario cuando se ejecuta en una geodatabase en Oracle.

  • Si el inicio de sesión no existe en la instancia de SQL Server ni el clúster de base de datos de PostgreSQL, esta herramienta agrega el inicio de sesión, crea un usuario en la base de datos proporcionada como el valor del parámetro Conexión de base de datos de entrada y crea un esquema para el usuario en la base de datos. La base de datos proporcionada se establece como la base de datos predeterminada del usuario en SQL Server.

  • Si el inicio de sesión existe en la instancia de SQL Server, esta herramienta agrega el usuario a la base de datos proporcionada como valor del parámetro Conexión de base de datos de entrada y crea un esquema coincidente. La base de datos predeterminada del usuario no se cambia en SQL Server.

  • Si el inicio de sesión existe en el clúster de la base de datos de PostgreSQL, esta herramienta crea un esquema coincidente en la base de datos proporcionada como valor del parámetro Conexión de la base de datos de entrada.

  • No puede crear un usuario llamado sde con esta herramienta. El usuario sde es el usuario administrador de la geodatabase y requiere más privilegios de los que otorga esta herramienta.

  • No se pueden utilizar delimitadores, como comillas dobles, al especificar un nombre de usuario. El nombre de usuario solo puede contener caracteres admitidos por el sistema de administración de bases de datos subyacente cuando se proporciona sin delimitadores.

  • Los usuarios creados en la base de datos tienen los siguientes privilegios:

    DBMSPrivilegios

    Oracle

    CREATE PROCEDURE

    CREATE SESSION

    CREATE SEQUENCE

    CREATE TABLE

    CREATE TRIGGER

    CREATE VIEW

    SELECT ON DBA_ROLES

    PostgreSQL

    CONNECT

    TEMPORAL

    USAGE en el esquema sde si el usuario se crea en una geodatabase o una base de datos que tiene instalado el tipo ST_Geometry

    SELECT, INSERT, UPDATE y DELETE en las vistas geometry_columns y geography_columns y SELECT en la vista spatial_ref_sys si PostGIS está instalado en la base de datos

    SQL Server

    CREATE TABLE

    CREATE PROCEDURE

    CREATE VIEW

Parámetros

EtiquetaExplicaciónTipo de datos
Conexión de la base de datos de entrada

Archivo de conexión a una base de datos de Oracle, PostgreSQL o SQL Server o a una geodatabase corporativa de esas bases de datos. Asegúrese de que la conexión se lleva a cabo como usuario con privilegios para crear usuarios en la base de datos. Al conectarse a Oracle, debe hacerlo como el usuario sys.

Workspace
Crear usuario con autenticación del sistema operativo
(Opcional)

Especifica el tipo de autenticación para el usuario. Utilice este parámetro solo si existe un inicio de sesión del sistema operativo para el que desea crear un usuario de base de datos. Este parámetro solo es compatible con bases de datos de SQL Server y Oracle.

  • Activado: se creará un usuario autenticado del sistema operativo. El inicio de sesión correspondiente ya debe existir.
  • Desactivado: se creará un usuario autenticado de la base de datos. Esta es la opción predeterminada.
Boolean
Usuario de base de datos

El nombre del nuevo usuario de base de datos.

Si crea un usuario de base de datos para un inicio de sesión de sistema operativo, el nombre de usuario debe coincidir con el nombre de inicio de sesión.

String
Usuario de base de datos y contraseña
(Opcional)

La contraseña para el nuevo usuario. Se implementa la política de contraseña de la base de datos subyacente.

Si crea un usuario de base de datos para el inicio de sesión de un sistema operativo, no se requerirán entradas.

Encrypted String
Rol
(Opcional)

El nombre del rol de la base de datos existente al que se agregará el nuevo usuario.

String
Nombre de espacio de tabla
(Opcional)

El nombre del espacio de tablas que se utilizará como espacio de tablas predeterminado para el nuevo usuario en una base de datos de Oracle. Puede especificar un espacio de tablas preconfigurado o, si el espacio de tablas no existe todavía, se creará en la ubicación de almacenamiento predeterminada de Oracle con el tamaño establecido en 400 MB. Si no se proporciona, el espacio de tablas predeterminado del usuario se establecerá en el espacio de tablas predeterminado de Oracle.

String

Salida derivada

EtiquetaExplicaciónTipo de datos
Se creó usuario de la base de datos

Si la herramienta se completó correctamente o no.

Boolean

arcpy.management.CreateDatabaseUser(input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})
NombreExplicaciónTipo de datos
input_database

Archivo de conexión a una base de datos de Oracle, PostgreSQL o SQL Server o a una geodatabase corporativa de esas bases de datos. Asegúrese de que la conexión se lleva a cabo como usuario con privilegios para crear usuarios en la base de datos. Al conectarse a Oracle, debe hacerlo como el usuario sys.

Workspace
user_authentication_type
(Opcional)

Especifica el tipo de autenticación para el usuario. Si especifica OPERATING_SYSTEM_USER, debe existir previamente un inicio de sesión en el sistema operativo para el usuario que desea crear. Los usuarios del sistema operativo solo se admiten en bases de datos de SQL Server y Oracle.

  • DATABASE_USERSe creará un usuario autenticado de la base de datos. Esta es la opción predeterminada.Si el sistema de administración de bases de datos no está configurado para permitir la autenticación de bases de datos, no utilice esta opción.
  • OPERATING_SYSTEM_USERSe creará un usuario autenticado del sistema operativo. El inicio de sesión correspondiente ya debe existir.Si el sistema de administración de bases de datos no está configurado para permitir la autenticación del sistema operativo, no utilice esta opción.
Boolean
user_name

El nombre del nuevo usuario de base de datos.

Si crea un usuario de base de datos para un inicio de sesión de sistema operativo, el nombre de usuario debe coincidir con el nombre de inicio de sesión.

String
user_password
(Opcional)

La contraseña para el nuevo usuario. Se implementa la política de contraseña de la base de datos subyacente.

Si crea un usuario de base de datos para el inicio de sesión de un sistema operativo, no se requerirán entradas.

Encrypted String
role
(Opcional)

El nombre del rol de la base de datos existente al que se agregará el nuevo usuario.

String
tablespace_name
(Opcional)

El nombre del espacio de tablas que se utilizará como espacio de tablas predeterminado para el nuevo usuario en una base de datos de Oracle. Puede especificar un espacio de tablas preconfigurado o, si el espacio de tablas no existe todavía, se creará en la ubicación de almacenamiento predeterminada de Oracle con el tamaño establecido en 400 MB. Si no se proporciona, el espacio de tablas predeterminado del usuario se establecerá en el espacio de tablas predeterminado de Oracle.

String

Salida derivada

NombreExplicaciónTipo de datos
out_result

Si la herramienta se completó correctamente o no.

Boolean

Muestra de código

Ejemplo 1 de CreateDatabaseUser (ventana de Python)

Este script de muestra usa un archivo de conexión de base de datos predefinido (oracledb1.sde) para crear un usuario de base de datos en Oracle y crea un espacio de tablas predeterminado (sdetbs) para el usuario.

import arcpy
arcpy.management.CreateDatabaseUser("C:/myconnections/oracledb1.sde", 
                                    "DATABASE_USER", "map", "Pam987", "sdetbs")
Ejemplo 2 de CreateDatabaseUser (ventana de Python)

Este script de muestra crea un espacio de trabajo de entrada (pgconn.sde) en una carpeta denominada connections y crea un esquema y rol de inicio de sesión de base de datos en PostgreSQL.

import arcpy
arcpy.management.CreateDatabaseConnection("C:/connections", "pgconn.sde", 
                                          "POSTGRESQL", myserver, mypgdb, 
                                          "DATABASE_AUTH", "ela", "3L@pwd", 
                                          "SAVE_USERNAME")
arcpy.management.CreateDatabaseUser("C:/connections/pgconn.sde", 
                                    "DATABASE_USER", "dataowner", "N0look")
Ejemplo 3 de CreateDatabaseUser (ventana de Python)

Este script de muestra crea un usuario de base de datos asignado a un inicio de sesión existente del sistema operativo (mynet\vorhoos) en SQL Server y usa un archivo de conexión de base de datos predefinido (connection_ssi.sde).

import arcpy
arcpy.management.CreateDatabaseUser("C:/gdbconnections/connection_ssi.sde", 
                                    "OPERATING_SYSTEM_USER", "mynet\\vorhoos")
Ejemplo 4 de CreateDatabaseUser (script independiente)

El siguiente script independiente le permite proporcionar información específica de su sitio utilizando opciones para crear un usuario de base de datos.

"""
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)

Temas relacionados