En este artículo ya habíamos visto lo que debemos hacer para conocer los nombres de todos los usuarios de nuestra Base de Datos:

https://firebird21.wordpress.com/2013/10/15/usuarios-de-nuestra-base-de-datos/

Pero a veces nos puede interesar conocer si un usuario tiene derechos (permisos, privilegios) sobre alguna tabla, vista o stored procedure, por ejemplo:

  • ¿SUSANA puede hacerle un SELECT a la vista V_ABM_VENDEDORES?
  • ¿SUSANA puede insertarle filas a la tabla VENTAS?
  • ¿GRACIELA puede ejecutar el stored procedure llamado GRABAR_VENDEDOR?

Toda esa información (y mucha más) la encontraremos en la tabla RDB$USER_PRIVILEGES, como vemos en la Captura 1. Queremos conocer cuales son los derechos del usuario WOJEDAR, para eso escribimos:

SELECT
   *
FROM
   RDB$USER_PRIVILEGES
WHERE
   RDB$USER = 'WOJEDAR'

Y estas son las primeras filas que obtenemos:

DERECHOS1

Captura 1. Si haces clic en la imagen la verás más grande

En la columna RDB$PRIVILEGE hay una letra que nos dice que derechos (permisos, privilegios) tiene el usuario:

  • I = INSERT
  • U = UPDATE
  • D = DELETE
  • S = SELECT
  • R = puede relacionar tablas mediante una FOREIGN KEY
  • X = puede ejecutar el stored procedure

El nombre de la tabla, la vista, o el stored procedure se guarda en la columna RDB$RELATION_NAME.

Entonces, para responder a la primera pregunta podríamos escribir algo como:

SELECT
   *
FROM
   RDB$USER_PRIVILEGES
WHERE
   RDB$USER_NAME = 'SUSANA' AND
   RDB$RELATION_NAME = 'VENDEDORES'

 Y si vemos una fila que tiene una letra “S” en la columna RDB$PRIVILEGE, entonces SUSANA sí puede hacerle un SELECT a la tabla VENDEDORES.

Conclusión:

Siempre es importante saber que derechos tiene cada usuario, si no queremos que el usuario MIRTHA tenga un derecho debemos verificar que ya no lo esté teniendo. Los derechos pueden ser otorgados por el usuario SYSDBA, por el creador de la Base de Datos o por cualquier usuario que tenga el rol RDB$ADMIN WITH GRANT OPTION. Si hay un problema de comunicación entre ellos entonces uno podría estar otorgándole un derecho a MIRTHA que MIRTHA no debería tener.

Para estar seguros de que MIRTHA tiene (o no tiene) un derecho lo que debemos hacer es consultar la tabla RDB$USER_PRIVILEGES, ya que es la única forma en que podremos estar 100% seguros de que tiene o no tiene ese derecho.

Artículos relacionados:

Usuarios de nuestra Base de Datos

El índice del blog Firebird21

Anuncios