En este artículo hemos visto como agregar usuarios, borrar usuarios, y cambiarles la contraseña:

https://firebird21.wordpress.com/2013/04/21/agregando-modificando-y-borrando-usuarios/

Esas personas podrán acceder a la Base de Datos pero aún no podrán realizar alguna operación en ella, ni siquiera una consulta. El Firebird por defecto les impide que ejecuten los comandos INSERT, UPDATE, DELETE, SELECT, EXECUTE PROCEDURE.

¿Por qué eso?

Porque para mantener el acceso y la utilización de la Base de Datos seguros los usuarios deben tener permisos solamente a las operaciones que específicamente se les hayan otorgado. Si no se les otorgó el permiso para realizar una operación, no podrán realizar esa operación.

Por ejemplo, a los vendedores no se les otorga el permiso para modificar los precios de venta de los productos; a los empleados no se les otorga el permiso para cambiar su propio sueldo; a los contadores no se les otorga el permiso de cambiar los datos de una venta; etc.

Si intentan realizar una operación a la cual no tienen permiso, el Firebird lo impedirá.

¿Qué es un rol?

Es el nombre otorgado a un grupo de usuarios que tienen exactamente los mismos permisos. Por ejemplo, se podría tener un rol llamado R_VENDEDORES en el cual se especificarán los permisos que poseen las personas que tienen ese rol. Todas las personas cuyo rol sea R_VENDEDORES tendrán esos permisos pero ninguno más. A los miembros de este rol se les podrían otorgar el permiso de insertar ventas (pero no modificarlas ni borrarlas), el permiso de consultar las cantidades en stock y los precios de venta de los productos (pero no insertar ni modificar ni borrar los datos de los productos). A los miembros de este rol no se les permitirá ver las compras ni las cobranzas ni los pagos ni los sueldos ni las comisiones de otros vendedores ni muchas otras cosas más.

¿Cómo se crea un rol?

Con el comando CREATE ROLE NombreRol

¿Cómo se elimina un rol?

Con el comando DROP ROLE NombreRol

¿Cuál es el comando usado para otorgarles permisos a los usuarios y a los roles?

El comando se llama GRANT (conceder, otorgar, en castellano) y su sintaxis es la siguiente:

GRANT
{<permisos> ON <objeto> | rol}
TO <concedido>
[WITH {GRANT|ADMIN} OPTION]
[{GRANTED BY | AS} [USER] otorgador]

¿Cuáles son los permisos que se pueden otorgar?

SELECT
Consultar datos
INSERT
Agregar nuevas filas
UPDATE
Modificar datos existentes
DELETE
Borrar filas
REFERENCES
Referirse a una Primary Key desde una Foreign Key. Siempre se debe 
otorgar este permiso para que puedan seleccionarse las columnas de 
la tabla referida.

ALL
Todos los anteriores

EXECUTE
Ejecuta un stored procedure o lo llama usando SELECT cuando se 
trata de un stored procedure seleccionable

ROLE
Adquiere todos los privilegios otorgados al rol. Una vez que un 
rol existe y se le han otorgado permisos, se convierte en un 
permiso que se les puede otorgar a los usuarios.

¿Qué significa WITH GRANT OPTION?

Que el usuario a quien se le otorgó ese permiso tiene el derecho de otorgarles ese mismo permiso a otros usuarios.

¿Cómo se quita un permiso?

 Con el comando REVOKE.

REVOKE <permisos>

ON <objeto>

FROM <revocado>

 Ejemplo 1. Otorgando el permiso de hacer SELECT a la tabla PRODUCTOS al usuario ALICIA

GRANT SELECT ON PRODUCTOS TO ALICIA

Ejemplo 2. Otorgando los permisos de SELECT y de INSERT y de UPDATE a la tabla PRODUCTOS al usuario SUSANA

GRANT INSERT, UPDATE, SELECT ON PRODUCTOS TO SUSANA

Ejemplo 3. Otorgando todos los permisos a la tabla PRODUCTOS al usuario GRACIELA

GRANT ALL ON PRODUCTOS TO GRACIELA

Ejemplo 4. Otorgando el permiso de cambiar el Código de Barras y el Precio de Venta de los productos al usuario INES

GRANT UPDATE (PRD_CODBAR, PRD_PREVTA) ON PRODUCTOS TO INES

Ejemplo 5. Otorgando el permiso de ejecutar el stored procedure GRABAR_PRODUCTO al usuario RAQUEL

GRANT EXECUTE ON PROCEDURE GRABAR_PRODUCTO TO RAQUEL

Ejemplo 6. Recibiendo y otorgando el permiso de hacer SELECT a la tabla PRODUCTOS

GRANT SELECT ON PRODUCTOS TO SILVIA WITH GRANT OPTION

Y ahora Silvia puede escribir:

GRANT SELECT ON PRODUCTOS TO MARCELA

GRANT SELECT ON PRODUCTOS TO LUCIANA WITH GRANT OPTION

Ejemplo 7. Otorgando permisos a un stored procedure

GRANT INSERT, UPDATE ON PRODUCTOS TO PROCEDURE GRABAR_PRODUCTO

En este ejemplo al stored procedure GRABAR_PRODUCTO se le otorgó el permiso de INSERT y de UPDATE a la tabla PRODUCTOS. Eso significa que si un usuario tiene el permiso de ejecutar el stored procedure también tendrá el permiso se insertar y de actualizar la tabla respectiva. Si no se hace así entonces habrá que asignarle a cada usuario individualmente (y a cada rol individualmente) los derechos de insertar y de actualizar la tabla, y eso llevaría mucho más tiempo.

GRANT ALL ON PRODUCTOS TO PROCEDURE RECALCULAR_SALDOS

En este ejemplo al stored procedure RECALCULAR_SALDOS se le otorgaron todos los permisos sobre la tabla PRODUCTOS. O sea que dentro de ese stored procedure se puede insertar, modificar, borrar, seleccionar datos y referenciar tablas.

Ejemplo 8. Otorgando los permisos a varios usuarios a la vez

GRANT SELECT ON PAISES TO ALICIA, GRACIELA, SILVIA, SUSANA

Estos cuatro usuarios podrán realizar consultas a la tabla PAISES

Ejemplo 9. Creando roles

CREATE ROLE R_ADMINISTRACION

CREATE ROLE R_VENDEDORES

(El nombre del rol no tiene por qué empezar con R_, esa es solamente una costumbre del autor de este blog, si quieres a tu rol lo puedes llamar: ADMINISTRACION, CONTADORES, VENDEDORES, etc., pero si el nombre empieza con R_ es más fácil saber que se trata de un rol)

Ejemplo 10. Otorgándole permisos al rol

GRANT UPDATE(PRD_PREVTA) ON PRODUCTOS TO R_ADMINISTRACION

GRANT INSERT, SELECT ON PRODUCTOS TO R_VENDEDORES

Ejemplo 11. Quitándole el permiso de hacer SELECT a la tabla PRODUCTOS al usuario ALICIA

REVOKE SELECT ON PRODUCTOS FROM ALICIA

Ejemplo 12. Quitándole todos los permisos a la tabla PRODUCTOS al usuario SUSANA

REVOKE ALL ON PRODUCTOS FROM SUSANA

Ejemplo 13. Quitándole el derecho de ejecutar el stored procedure GRABAR_PRODUCTO al usuario RAQUEL

REVOKE EXECUTE ON PROCEDURE GRABAR_PRODUCTO FROM RAQUEL

Ejemplo 14. Quitándole el derecho de otorgar permisos al usuario SILVIA

REVOKE GRANT OPTION FOR SELECT ON PRODUCTOS FROM SILVIA

Artículo relacionado:

El índice del blog Firebird21