Crear un usuario de base de datos (Administración de datos)
Resumen
La herramienta Crear un usuario de base de datos crea un usuario de base de datos con privilegios suficientes para crear datos en la base de datos.
Uso
-
Esta herramienta solo se puede utilizar con Oracle, Microsoft SQL Server o PostgreSQL. (No compatible con Windows Azure SQL Database.)
Para Oracle y SQL Server, si un inicio de sesión del sistema operativo ya existe, la herramienta Crear un usuario de base de datos puede agregar ese inicio de sesión como un usuario a la base de datos especificada.
No se puede crear un usuario de base de datos para un grupo Windows.
Los usuarios creados en la base de datos tiene los siguientes privilegios:
DBMS
Privilegios
Oracle
CREATE SESSION
CREATE SEQUENCE
CREATE TRIGGER
CREATE VIEW
CREATE TABLE
SELECCIONAR EN DBA_ROLES
PostgreSQL
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 la tabla public.geometry_columns y SELECT en la tabla public.spatial_ref_sys si tiene instalado el tipo de geometría de PostGIS
SQL Server
CREATE TABLE
CREATE PROCEDURE
CREATE VIEW
DEFINICIÓN DE LA VISTA
Si el inicio de sesión no existe en la instancia de SQL Server o el cluster de base de datos de PostgreSQL, la herramienta Crear un usuario de base de datos agrega el inicio de sesión, crea un usuario en la base de datos especificada para la base de datos de entrada y crea un esquema para el usuario en la base de datos. La base de datos especificada se establece como la base de datos predeterminada del usuario en SQL Server.
Si el inicio de sesión ya existe en la instancia de SQL Server, la herramienta Crear un usuario de base de datos agrega el usuario de la base de datos que especifique para la base de datos de entrada y crea un esquema de geocodificación. El usuario de la base de datos predeterminada no se modifica en SQL Server.
Si el inicio de sesión ya existe en el cluster de la base de datos PostgreSQL, la herramienta Crear un usuario de base de datos crea un esquema de geocodificación en la base de datos que especifique para la base de datos de entrada.
No puede crear un usuario llamado sde con esta herramienta. El usuario sde es un usuario administrador de la geodatabase y requiere más privilegios de los que otorga la herramienta Crear un usuario de base de datos.
No se pueden utilizar delimitadores, como comillas dobles, al especificar un nombre de usuario. Por lo tanto, 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.
Sintaxis
Parámetro | Explicación | Tipo de datos |
input_database |
Especifique el archivo de conexión a una base de datos o geodatabase corporativa en Oracle, PostgreSQL o SQL Server. Asegúrese de que el archivo de conexión se conecte directamente a la base de datos (sin usar un servicio ArcSDE) y que la conexión se realiza como un usuario administrador de base de datos. Al conectarse a Oracle, debe hacerlo como el usuario del sistema. | Workspace |
user_authentication_type (Opcional) |
Utilice esta opción solo si existe un inicio de sesión del sistema operativo para el que desea crear un usuario de base de datos. Está habilitada solamente para bases de datos de Oracle y SQL Server.
| Boolean |
user_name |
Escriba un nombre para el nuevo usuario de la base de datos. Si elige crear 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) |
Escriba una contraseña para el nuevo usuario. Se implementará la política de contraseña de la base de datos subyacente. Si elige crear 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) |
Si desea agregar el nuevo usuario a un rol de base de datos existente, escriba el nombre del rol. | String |
tablespace_name (Opcional) |
Cuando cree un usuario en una base de datos de Oracle, escriba el nombre del espacio de tabla que se va a utilizar como el espacio de tabla predeterminado para el usuario. Puede especificar un espacio de tabla preconfigurado o, si el espacio de tabla no existe, se creará en la ubicación de almacenamiento predeterminada de Oracle con el tamaño establecido en 400 MB. Si no se especifica, el espacio de tabla predeterminado del usuario se establece en el espacio de tabla predeterminado de Oracle. | String |
Ejemplo de código
Utiliza 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 tabla predeterminado para el usuario (sdetbs)
#Import arcpy module
import arcpy
CreateDatabaseUser_management("C:\Documents and Settings\user1\Application Data\ESRI\ArcCatalog\oracledb1.sde", "DB", "map", "Pam987", "sdetbs")
Crea un espacio de trabajo de entrada (pgconn.sde) en la ubicación de conexión predeterminada de ArcGIS for Desktop, crea un rol de inicio de sesión de base de datos y un esquema en PostgreSQL
#Import arcpy module
import arcpy
CreateDatabaseConnection_management("Database Connections", "pgconn.sde", "POSTGRESQL", myserver, mypgdb, "DATABASE_AUTH", "ela", "3L@pwd", "SAVE_USERNAME")
CreateDatabaseUser_management("C:\Documents and Settings\u5\Application Data\ESRI\ArcCatalog\pgconn.sde", "DB", "dataowner", "N0look")
Crea un usuario de base de datos asignado a un inicio de sesión del sistema operativo (mynet\vorhoos) en SQL Server y utiliza un archivo de conexión de base de datos predefinido (connection_ssi.sde)
#Import arcpy module
import arcpy
CreateDatabaseUser_management("C:\Documents and Settings\u5\Application Data\ESRI\ArcCatalog\connection_ssi.sde", "OSA", "mynet\vorhoos", "", "")
La siguiente secuencia de comandos independiente le permite proporcionar información específica de su sitio utilizando opciones para crear un usuario de base 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
Author: Esri
"""
# Import system modules
import arcpy, os, optparse, 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)