8. Seguridad en la conexión: Connect – Disconnect
Estatuto CONNECT
Para que un procedimiento que accesa a una base de datos, corra debe contenerse a la base
de datos referida esto se puede hacer desde el DATA DICTIONARY o bien mediante el
estatuto CONECT desde un procedimiento. Para que el usuario se conecte a una o más
bases de datos se deben usar el estatuto
CONNECT. Las operaciones que se emplean para conectarse a una base de datos son las
mismas que se usan en el diccionario de datos.
Al conectarse a una base de datos se puede usar o no el nombre físico con el path
completo.
También se puede indicar un nombre lógico, sin embargo si no se indica el nombre lógico,
PROGRESS le asigna uno usando el mismo nombre del archivo sin extensión o path. El
nombre lógico es necesario para desconectarse de la base de datos.
Sintaxis:
CONNECT ({physical-name} [options] options )
9. Desconexión de una base de datos
Estatuto DISCONNECT
Para desconectarse de una o más bases de datos desde un procedimiento se usa el
estatuto DISCONNECT
Sintaxis:
DISCONNECT {logical-name}
*Programa para conectar y desconectar bases de datos */
CONNECT ... nom-bd.
DISCONNECT nom-bd (LOGICO).
10. SEGURIDAD DE LOS OBJETOS:
GRANT - REVOKE
SEGURIDAD
LA EJECUCIÓN DE UNA OPERACIÓN EN LOS DATOS DE LA BASE DE DATOS POR PARTE DE UN
USUARIO ESTÁ SUPEDITADA A LA POSESIÓN POR PARTE DEL USUARIO DE LOS PRIVILEGIOS
NECESARIOS PARA LA OPERACIÓN CONCRETA EJECUTADA EN EL CONJUNTO DE DATOS
ESPECÍFICO.
11. Los privilegios se asignan del siguiente modo:
•Un usuario que crea una tabla o cualquier otro objeto de la base de datos es el propietario y se le garantizan
automáticamente todos los privilegios aplicables a dicho objeto, con la posibilidad de darles también a otros
usuarios dichos privilegios (privilegio de concesión).
•Un usuario que tenga un privilegio y posea además sobre él el privilegio de concesión puede asignarle tal
privilegio a otro usuario y pasarle también el privilegio de concesión.
•Los privilegios los concede quien tiene el permiso (es decir el propietario del objeto y quien tiene el privilegio
de concesión) mediante la orden GRANT, y los revoca mediante la orden REVOKE.
La sintaxis de la orden GRANT es la siguiente:
GRANT lista_privilegios ON objeto TO lista_usuarios [ WITH GRANT OPTION ]
Esto asigna al usuario los privilegios presentes en la lista_privilegios sobre el objeto especificado.
12. Los privilegios asignables son los siguientes (con sus respectivas sintaxis):
• USAGE
Privilegio para usar un dominio específico u otro objeto de la base de datos.
• SELECT
Privilegio para acceder a todas las columnas de una tabla o de una vista.
• INSERT [ (nombre_columna) ]
Si se especifica la opción nombre_columna, es el privilegio para incluir valores en la columna
indicada de una tabla o de una vista. Sin el nombre_columna es el privilegio para añadir valores a
todas las columnas, incluidas las que se añadirán a continuación.
• UPDATE [ (nombre_columna) ]
Si se especifica la opción nombre_columna, se trata del privilegio para actualizar el valor en la
columna indicada de una tabla o de una vista. Si no, permite actualizar el valor de todas las columnas,
incluidas las que se añadirán a continuación.
• DELETE
Privilegio para eliminar líneas de una tabla o de una vista.
• REFERENCES [ (nombre_columna) ]
Si se especifica la opción nombre_columna, es el privilegio de referirse a la columna indicada de una
tabla o de una vista en la definición de un vínculo de integridad. Sin la opción, concede dicho
privilegio para todas las columnas, incluidas las que se añaden a continuación.
13. El objeto al que se refiere el privilegio es generalmente una tabla o una vista. La sintaxis para
su especificación es en ese caso:
[TABLE] nombre_tabla
Si está presente la opción [ WITH GRANT OPTION ], se asigna además el privilegio de
concesión, que permite a los usuarios transferir ulteriormente los privilegios que se les han
asignado.
Por ejemplo:
GRANT SELECT, INSERT, UPDATE(nombre) ON persona TO David WITH GRANT
OPTION
le asigna al usuario David los privilegios de SELECT e INSERT sobre todas las columnas de
la tabla persona y el de UPDATE sobre la columna nombre de dicha tabla. Se les garantiza,
además, el privilegio de asignar estos permisos a otros usuarios.
Para quitarles los privilegios a los usuarios se usa REVOKE:
REVOKE [ GRANT OPTION FOR ] lista_privilegios ON objeto FROM lista_usuarios {
RESTRIC | CASCADE }
14. SEGURIDAD EN LA EJECUCION: GRANT - REVOKE
Para poder realizar cualquier operación en SQL, el usuario debe contar con la autorización apropiada, en caso
contrario la operación se rechazará con un mensaje de error.
Por ej. para ejecutar:
SELECT * FROM S;
el usuario debe tener autorización de selección sobre S.
Cuando se realiza la instalación de la base de datos parte del procedimiento implica la designación de un usuario
con privilegios específicos como administrador del sistema (que se identificará, al igual que el resto de los usuarios,
mediante un identificador de usuario). Este usuario privilegiado recibe de manera automática una autorización
especial llamada SYSADM que confiere el derecho a realizar todas las operaciones del sistema. Puede crear otros
usuarios y conceder las autorizaciones.
La concesión de derechos se hace mediante la proposición GRANT.
GRANT <derecho> ON TABLE <nombre tabla/vista> TO <nombre de usuario>
Algunos ejemplos:
GRANT SELECT ON TABLE tabla1 TO usuario1
GRANT SELECT ON TABLE tabla1 TO public
GRANT SELECT, UPDATE (columna1, columna2,..) ON TABLE tabla1 TO usuario1, usuario2,..
GRANT ALL ON TABLE tabla1 TO usuario1
16. En general, las autorizaciones aplicables a
tablas son: Autorización SELECT
Seleccionar UPDATE Actualizar DELETE
Eliminar INSERT Insertar ALTER Derecho a
ejecutar ALTER TABLE INDEX Derecho a
ejecutar CREATE INDEX CONNECT
Conectarse a la Base de Datos RESOURCE
Crear objetos ALL Todos los permisos
Especificando WITH GRANT OPTION en la
proposición GRANT, es posible que dicho
usuario pueda ceder el permiso a otro usuario.
GRANT <derecho> ON TABLE <nombre
tabla/vista> TO <nombre de usuario>
WITH GRANT OPTION
Para revocar las autorizaciones se utiliza la
proposición REVOKE.
REVOKE <derecho> ON TABLE <nombre
tabla/vista> FROM <nombre de usuario>