Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Trabajo
Transacciones y Roles de Usuarios en distintos SMBD
TRANSACCIÓN SQL
Una transacción es un conjunto de operaciones que van a ser tratadas como una única
unidad. Estas transacciones deben cumplir 4 propiedades fundamentales comúnmente
conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad).
La transacción más simple en SQL Server es una única sentencia SQL. Por ejemplo, una
sentencia como esta:
UPDATE Products SET UnitPrice=20 WHERE ProductName ='Chai'
Es una transacción. (Como siempre ejemplos de Northwind) Esta es una transacción
'autocommit', una transacción autocompletada.
Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones
lo que va a ocurrir y a continuación realiza los cambios necesarios en la base de datos. Si
hay algún tipo de problema al hacer esta operación el SQL Server puede leer en el fichero
de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de
datos al estado en el que se encontraba antes de recibir la sentencia.
Por supuesto este tipo de transacciones no requieren de nuestra intervención puesto que
el sistema se encarga de todo. Sin embargo, si hay que realizar varias operaciones y
queremos que sean tratadas como una unidad tenemos que crear esas transacciones de
manera explícita.
TRANSACCIÓN MYSQL
El servidor de bases de datos MySQL soporta distintos tipos de tablas, tales como ISAM,
MyISAM, InnoDB y BDB (Berkeley Database). De éstos, InnoDB es el tipo de tabla más
importante (después del tipo predeterminado, MyISAM), y merece una atención especial.
Los pasos para usar transacciones en MySQL son:
Iniciar una transacción con el uso de la sentencia BEGIN.
Actualizar, insertar o eliminar registros en la base de datos.
Si se quieren los cambios a la base de datos, completar la transacción con el uso
de la sentencia COMMIT. Únicamente cuando se procesa un COMMIT los cambios
hechos por las consultas serán permanentes.
Si sucede algún problema, podemos hacer uso de la sentencia ROLLBACK para
cancelar los cambios que han sido realizados por las consultas que han sido
ejecutadas hasta el momento.
TRANSACCIÓN JAVA
TRANSACCION MARIADB
Descripción
La WORK palabra clave opcional es compatible con COMMIT y ROLLBACK, al igual que
las cláusulas CHAIN y RELEASE.
TRANSACCIÓN ACCESS
Observaciones
Las transacciones no se inician automáticamente. Para iniciar una transacción, debe
hacerlo explícitamente con BEGIN TRANSACTION.
Las transacciones se pueden anidar hasta cinco niveles. Para iniciar una
transacción anidada, use BEGIN TRANSACTION en el contexto de una transacción
existente.
TRANSACCIÓN POSTRESQL
BEGIN;
UPDATE cuentas SET balance = balance - 100.00 WHERE nombre = 'Alicia';
-- etc etc
COMMIT;
Si en medio de una transacción se decide que ya no se quiere registrar los cambios
(tal vez el balance de Alicia se volvió negativo en algún momento, por ejemplo), se
puede recurrir a la orden ROLLBACK en lugar de COMMIT y todas las
actualizaciones hasta ese punto quedarían canceladas.
TRANSACCION INFORMIX
Usar COMMIT WORK solo al final de una operación de múltiples estados en una
base de datos con registro de transacciones, cuando esté seguro de que desea
mantener todos los cambios realizados en la base de datos desde el comienzo de
una transacción.
Sintáxis:
COMMIT WORK;
TRANSACCIÓN DB2
Sintáxis:
COMMIT WORK;
TRANSACCIÓN SYSBASE
Rollback
Descripción
Restaura una transacción definida por el usuario al punto de salvaguarda nombrado
en la transacción o al principio de la transacción.
Sintaxis
rollback [tran | transaction | work]
[transaction_name | savepoint_name]
Parameters
tran | transaction |
transaction_name
savepoint_name
POSTRESQL
MYSQL
Para poder establecer permisos, las siguientes sentencias deben de ejecutarse utilizando
el usuario root.
Si queremos que el nuevo usuario tenga permisos de administrador (Todos los permisos),
debemos de ejecutar la siguiente sentencia.
GRANT ALL PRIVILEGES ON *.* TO 'nombre_usuario'@'localhost';
Los asteriscos indican que los permisos serán asignados a todas las bases de datos y a
todas las tablas (primer asteriscos bases de datos, segundo asterisco tablas).
Si queremos asignar permisos para ciertas acciones, la sentencia quedaría de la siguiente
manera. Reemplazamos ALL PRIVILEGES y colocamos las acciones que queremos
asignar.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP
-> ON XXXXXX.*
-> TO 'nombre_usuario'@'localhost';
En esta ocasión estamos indicando que el nuevo usuario podrá consultar, crear, actualizar
y eliminar registros, así cómo podrá crear o eliminar elementos (tablas, índices, columnas,
funciones, stores, etc ...)
Todos estos permisos serán válidos únicamente en la base de datos y se aplicarán a
todas las tablas.
Si queremos asignar permisos únicamente a una tabla, reemplazamos el asteriscos por el
nombre de la tabla.
Una vez hayamos finalizado con los permisos, el último paso será refrescarlos.
FLUSH PRIVILEGES;
MARIA DB
Para sólo permitir el acceso local desde el propio servidor (localhost). Esta será la
configuración más segura y más habitual que usaremos para una aplicación web:
mysql> GRANT USAGE ON *.* TO 'miusuario'@localhost IDENTIFIED BY 'mipassword';
Para permitir el acceso desde cualquier otra máquina que tenga acceso al servidor
MySQL desde la red:
mysql> GRANT USAGE ON *.* TO 'miusuario'@'%' IDENTIFIED BY 'mipassword';
4. Conceder todos los privilegios sobre la base de datos al usuario
mysql> GRANT ALL privileges ON `mibd`.* TO 'miusuario'@localhost;
Al igual que en punto anterior, si queremos que el usuario pueda trabajar con la base de
datos desde cualquier ubicación tendremos que sustituir localhost por ‘%’.
5. Aplicar los cambios realizados
Para que sean efectivos los nuevos permisos que hemos asignado debemos finalizar con
el siguiente comando:
mysql> FLUSH PRIVILEGES;
SQL
Especifica el objeto en el que se va a conceder el permiso
ON [ OBJECT :: ] [ schema_name ] . object_name
Especifica la entidad de seguridad para la que se concede el permiso.
TO <database_principal>
Indica que la entidad de seguridad también podrá conceder el permiso especificado a
otras entidades de seguridad.
WITH GRANT OPTION
Especifica una entidad de seguridad de la que la entidad de seguridad que ejecuta esta
consulta deriva su derecho de conceder el permiso.
AS <database_principal>
Especifica un usuario de base de datos.
Database_user
Especifica un rol de base de datos.
Database_role
Especifica un rol de aplicación.
Application_role
Especifica un usuario de base de datos asignado a un usuario de Windows.
Database_user_mapped_to_Windows_User
Especifica un usuario de base de datos asignado a un grupo de Windows.
Database_user_mapped_to_Windows_Group
Especifica un usuario de base de datos asignado a un certificado.
Database_user_mapped_to_certificate
Especifica un usuario de base de datos asignado a una clave asimétrica.
Database_user_mapped_to_asymmetric_key
Especifica un usuario de base de datos sin entidad de seguridad de servidor
correspondiente.
Database_user_with_no_login
ORACLE
Para ver los roles del usuario conectado en ese momento:
select username, granted_role
from user_role_privs;
Para ver los roles asignado a un rol:
select role, granted_role
from role_role_privs;
Para ver los roles definidos en la base de datos:
select role from dba_roles;
Permisos para acceder a la base de datos (permiso de sistema):