Encontré en un blog el
código de un procedimiento para poder dar privilegos a los usuarios de una base de datos:
Código:
CREATE PROCEDURE SP_GRANT_ALL_TO(
tcNombreUsuario VARCHAR(31))
AS
DECLARE VARIABLE tcObjeto VARCHAR(31);
BEGIN
-- Se otorga derechos sobre las tablas y sobre las vistas
FOR SELECT RDB$RELATION_NAME FROM RDB$RELATIONS
WHERE RDB$SYSTEM_FLAG = 0
INTO :tcObjeto
DO
EXECUTE STATEMENT 'GRANT ALL ON ' || tcObjeto || ' TO ' || tcNombreUsuario;
-- Se otorga derechos sobre los stored procedures
FOR SELECT RDB$PROCEDURE_NAME FROM RDB$PROCEDURES
WHERE RDB$SYSTEM_FLAG = 0
INTO :tcObjeto
DO
EXECUTE STATEMENT 'GRANT EXECUTE ON PROCEDURE ' || tcObjeto || ' TO ' || tcNombreUsuario;
END;
pero al implementarlo en mi base de datos no he logrado que funcione. Lo ejecuto así:
Código:
SecurityService->Active = false;
SecurityService->LoginPrompt = false;
SecurityService->Params->Clear();
SecurityService->Params->Add("user_name=sysdba");
SecurityService->Params->Add("password=masterkey");
StoredProc->Close(); // Asignamos el procedimiento
StoredProc->StoredProcName = "SP_GRANT_ALL_TO";
y al registrar los usuarios hago esto:
Código:
SecurityService->UserName = Auxiliar->FieldByName("Nombre")->AsString;
SecurityService->Password = Auxiliar->FieldByName("Clave")->AsString;
SecurityService->Active = true;
SecurityService->AddUser();
SecurityService->Active = false;
StoredProc->Close(); // Concedemos privilegios de uso
StoredProc->ParamByName("tcNombreUsuario")->AsString = Auxiliar->FieldByName("Nombre")->AsString;
StoredProc->ExecProc();
Se ejecuta sin dar ningún error pero al comprobar con SQL Manager me encuentro que ni tablas ni vistas ni procedimientos se les ha dado privilegios a ningún usuario y tenido que hacerlo "a pedal", sacando el código que hay dentro del procedimiento para ejecutar los GRANT. De hecho una vez que se registran los usuarios y entro conj el nombre y la clave de cualquiera de ellos me avisa que no tiene permiso para consultar la tabla de configuración, que es la primera que se abre
¿Dónde puedo estar metiendo al pata?