CÓMO
Las instrucciones proporcionadas describen cómo revocar privilegios de INSERT, UPDATE y DELETE de las tablas gdb_* de geodatabase en instancias de geodatabases corporativas de Oracle y SQL*Server (aplicable para ArcGIS 9.x y 10.x).
Al crear una geodatabase, se crea un conjunto de tablas de metadatos de geodatabase llamadas gdb_* en el esquema del administrador (el esquema SDE en Oracle y SQL*Server o el esquema dbo en SQL*Server) y los privilegios de SELECT, INSERT, UPDATE y DELETE se otorgan automáticamente para PUBLIC en cada tabla. Estos privilegios son obligatorios para permitir la creación de clases de objeto, clases de entidad, datasets de entidades, dominios, redes, topologías, replicación, etc., en la geodatabase. Desafortunadamente, los privilegios públicos dan pie a que los usuarios dañen de forma malintencionada una geodatabase con SQL para modificar directamente las tablas.
Para evitar posibles usos indebidos y daños, es posible revocar los privilegios INSERT, UPDATE y DELETE de PUBLIC para las tablas gdb_*. Si los privilegios predeterminados se eliminan de las tablas gdb_* de geodatabase, los usuarios no pueden crear objetos en la geodatabase ni posiblemente realizar tareas fundamentales, por ejemplo, ejecutar diversas herramientas de geoprocesamiento que crean o actualizan la geodatabase.
Antes de revocar privilegios en un entorno de producción, se recomienda probar la aplicación de ArcGIS para identificar y comprender la funcionalidad de geodatabase que no esté disponible para los usuarios sin privilegios de INSERT, UPDATE o DELETE desde las tablas gdb_* de geodatabase.
En caso necesario, el administrador de la geodatabase puede otorgar de manera explícita los privilegios de INSERT, UPDATE y DELETE a usuarios específicos de la base de datos que deban crear y modificar propiedades de la base de datos.
A continuación se muestra el procedimiento de Oracle para revocar privilegios de INSERT, UPDATE y DELETE del PUBLIC para las tablas gdb_*. Ejecute el procedimiento como el usuario sde en SQL*Plus.
Código: DECLARE CURSOR each_table IS SELECT DISTINCT table_name FROM user_tab_privs_made WHERE table_name LIKE 'GDB_%' AND privilege IN ('INSERT','UPDATE','DELETE') AND grantee = 'PUBLIC' ORDER BY table_name; BEGIN IF USER
A continuación se muestra el procedimiento de Oracle para otorgar privilegios de INSERT, UPDATE y DELETE a PUBLIC para las tablas gdb_*. Ejecute el procedimiento como el usuario sde en SQL*Plus.
Código: DECLARE CURSOR each_table IS SELECT DISTINCT table_name FROM user_tab_privs_made WHERE table_name LIKE 'GDB_%' AND privilege = 'SELECT' AND grantee = 'PUBLIC' ORDER BY table_name; BEGIN IF USER
A continuación se muestra el procedimiento de SQL*Server para revocar privilegios de INSERT, UPDATE y DELETE del PUBLIC para las tablas gdb_*. Ejecute el procedimiento como el usuario sde o dbo en SQL*Server Management Studio.
Código: Declare @TName varchar(100) Declare @SQLStr varchar (500) Declare each_table cursor for select name from sys.tables where name like 'GDB_%' open each_table Fetch each_table into @TName while (@@fetch_status=0) Begin set @SQLStr = 'REVOKE INSERT, UPDATE, DELETE ON ' + @TName + ' FROM PUBLIC cascade' exec (@SQLStr) Fetch each_table into @TName End close each_table Deallocate each_table
Código: Declare @TName varchar(100) Declare @SQLStr varchar (500) Declare each_table cursor for select name from sys.tables where name like 'GDB_%' open each_table Fetch each_table into @TName while (@@fetch_status=0) Begin set @SQLStr = 'GRANT INSERT, UPDATE, DELETE ON ' + @TName + ' TO PUBLIC' exec (@SQLStr) Fetch each_table into @TName End close each_table Deallocate each_table
Obtener ayuda de expertos en ArcGIS
Descargar la aplicación de soporte de Esri