Valor da variável global em sistemas multi-empresas, como proteger por sessão?

Olá,
estou precisando de ajuda para proteger os dados das variáveis Globais do meu sistema feito em SC9.

No meu banco utilizo relacionamentos para separa os dados das empresas. ao logar eu guardo esta informação na variável global [minhaEmpresa], e esta eu uso para filtrar dados no banco e apresentar logos e dados da empresa.
é tem funcionado muito bem até agora. mas esta semana um usuário da empresa A conseguiu ver os registros da Empresa B sem ter acesso ao login e senha, simplesmente por que A logou as 9:15 preenchendo a variável global com o id=10, e B logou as 9:20 em um Ambiente físico diferente, e não sei o que aconteceu que o valor da variável para A que era 10 passou a ser igual a B que é 11.isso fez com que empresa A tivesse todos os acessos e registros da empresa B.
por favor, o que eu posso fazer para evitar esta situação, pelo que eu entendi da relação servidor-cliente cada cliente teria uma sessão distinta, e as variáveis também seriam distintas.

Tem falhas na sua segurança, nenhuma app pode ser carregada sem passar pelo login.
Em seu login logo na carga deve esvaziar todas as globais.
Sugestão é encriptar globais essenciais ao sistema.

Haroldo, muito Obrigado!

Após sua instrução observei que a aplicação em questão estava permitindo chamada diretamente pela URL sem usar a validação da segurança.
também ja esvaziei todas minhas variáveis Globais.
No SC tem a opção de Variável de sessão (POST, GET, SESSAO), saberia me informar se o fato de setar como Variável de Sessão Ajuda a resolver este tipo de situação?

Não muda.
De um reset nas globais ao carregar o login

Cara,

Deixa o DB fazer isso por vc… crie uma procedure onde todas as queries passem por ela validando o usuário específico.

jovitomelo,

Confesso que me falta conhecimento para tal feito. Seria possível dar um exemplo de procedure que possa filtrar estas informações?

Diógenes, boa noite.

Não é tão simples dar um exemplo de procedure que possa resolver seu problema num piscar de olhos, você terá que estudar um pouco pra ter sua solução mas em linhas gerais a coisa funciona mais ou menos assim:

a) Existe alguma informação no seu cadastro de usuários que define que ele pode acessar essa ou aquela informação…
b) Dê uma estudada no seu banco de dados - coisa rápida - e aprenda quais são os passos para se criar uma procedure/função…
c) Crie uma procedure que retorne um boolean (Y/N) se a informação que esse usuário está acessando faz parte do rol de acesso dele.
d) Em CADA query que você submeter a consulta que precise validar este usuário, você chama essa procedure na cláusula WHERE… se o resultado for Y está ok, caso contrário ele não terá acesso a essa informação pra nada (INSERT, UPDATE, DELETE ou VIEW)…

SELECT

FROM


usuarios as u

WHERE


AND PermiteAcesso(usuario)

Mais ou menos isso.

Jovito

jovitomelo,

Muito Obrigado!
Vou fazer a Procedure e depois te mostro como Ficou.