En Microsoft SQL Server, los administradores de base de datos agregan nombres de usuario a la instancia de SQL Server y estos se asignan a usuarios de bases de datos individuales en la instancia de SQL Server. Los usuarios de la base de datos que creen tablas y clases de entidad deben tener los privilegios necesarios para crear estos objetos en la base de datos y un esquema donde puedan hacerlo. Al usar ArcGIS, ese esquema debe tener el mismo nombre que el usuario de la base de datos.
Puede usar la herramienta Crear usuario de base de datos o una secuencia de comandos para hacer todo lo siguiente:
- Cree o agregue un nombre de usuario a la instancia de SQL Server.
- Cree un usuario asignado al nombre de usuario especificado.
- Cree un esquema de geocodificación para el usuario en la base de datos que especifique.
- Otorgue privilegios suficientes al usuario para crear tablas, clases de entidad y vistas en la base de datos especificada.
Agregar un usuario que puede crear datos
Puede ejecutar la herramienta Crear usuario de base de datos desde ArcGIS Desktop o invocarla en una secuencia de comandos de Python para crear un usuario de la base de datos que puede crear tablas, clases de entidad y vistas.
Debe conectarse a la base de datos con un nombre de usuario que tenga privilegios sysadmin en la instancia de SQL Server para ejecutar la herramienta Crear usuario de base de datos.
Si desea crear un usuario de la base de datos para un inicio de sesión de Windows, el nombre de usuario ya debe existir antes de ejecutar la herramienta.
Utilice la herramienta Crear usuario de base de datos
- Inicie un cliente de ArcGIS Desktop.
- Conéctese a la base de datos o geodatabase con un nombre de usuario que tenga privilegios sysadmin en la instancia de SQL Server.
- 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.
- Elija si desea crear un nombre de usuario autenticado de SQL Server o usar un nombre de usuario autenticado de Windows existente.
- Deje Crear un usuario autenticado del sistema operativo desactivado para crear un nombre de usuario autenticado de SQL Server. Tenga en cuenta que, de forma predeterminada, las instancias de SQL Server usan solo la autenticación de Windows. Si su instancia no está configurada para usar la autenticación de SQL Server y Windows, no podrá crear un nombre de usuario autenticado de la base de datos.
- Marque Crear un usuario autenticado del sistema operativo para usar un nombre de usuario autenticado de Windows existente.
- Escriba el nombre del usuario de la base de datos que la herramienta creará.
Si elige crear un nombre de usuario autenticado de SQL Server, el nombre que escriba aquí también se usará para el inicio de sesión.
- Escriba una contraseña para el usuario de la base de datos.
- Si ya tiene un rol de base de datos al que desea agregar este usuario, especifique dicho rol.
- Haga clic en Aceptar (ArcMap) o Ejecutar (ArcGIS Pro).
Ejecutar una secuencia de comandos 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)
Puede ejecutar la secuencia de comandos desde un equipo que tenga instalado ArcGIS Desktop (Standard o Advanced), ArcGIS Server (Standard o Advanced) o ArcGIS Engine con la extensión Geodatabase Update.
- Guarde el archivo con una extensión .py.
- Ejecute la secuencia de comandos, proporcionando opciones e información específicas de su instancia de SQL Server y el usuario que desea crear.
En el siguiente ejemplo, el nombre de la secuencia de comandos es create_database_user.py. En la instancia de SQL Server, ssi5, se crea nombre de usuario de SQL Server (gisd_owner) y en la base de datos, gisdata, se crean el usuario y el esquema correspondientes. El usuario no se agrega a un rol.
create_database_user.py --DBMS SQL_SERVER -i ssi5 -D gisdata --auth DATABASE_AUTH -U sa -P !nocopy! --utype DATABASE_USER -u gisd_owner -p T3mpPass
La base de datos ahora tiene un usuario que puede crear tablas.
Existen varias formas en que el propietario de los datos puede crear tablas en la base de datos o geodatabase. Para obtener información sobre la creación de tablas con ArcGIS, consulte Información general sobre cómo agregar datasets a la geodatabase.
Cuando existan los datasets, el propietario de los datos puede otorgar privilegios sobre los datasets a otros usuarios. Consulte Otorgar y revocar privilegios sobre datasets para obtener instrucciones.
Crear nombres de sesión y usuarios con las herramientas de SQL Server
Si desea crear un usuario 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 SQL Server para hacerlo. Hay algunos aspectos a tener en cuenta cuando crea sus propios nombres de usuario y usuarios para usarlos con ArcGIS:
- Todos los usuarios de la base de datos que creen datos deben tener un esquema en la base de datos. El nombre del esquema debe coincidir con el nombre de usuario.
- Puede otorgar a un grupo de Windows acceso a SQL Server en lugar de iniciar sesión individualmente en Windows, lo que simplifica la creación y gestión de los nombres de usuario. Todos los miembros del grupo de Windows pueden iniciar sesión en SQL Server. Los privilegios sobre servidores, bases de datos y datasets otorgados al grupo se aplican automáticamente a todos sus miembros. Sin embargo, tenga en cuenta que no puede crear un esquema para almacenar los datos creados por todos los miembros del grupo. Cada usuario del grupo que crea datos en la geodatabase debe tener su propio esquema en el que almacena los datos. SQL Server crea un esquema de usuario en la base de datos la primera vez que un miembro del grupo crea datos. Esto ocurre automáticamente; no cree un esquema y usuario manualmente.
Para obtener instrucciones sobre el uso de las herramientas de SQL Server para crear nombres de usuario, usuarios y esquemas, consulte la documentación de Microsoft SQL Server.