configurar banco de dados na web

(Reação Web) #1

Bom Dia Pessoal, estou com problema na configuração de um sistema que desenvolvi.
4 empresas vão utilizar este sistema e cada uma em uma base de dados independente, o sistema é o mesmo para ambos.

quando eu configuro a empresa A, todas os demais sistemas são reconfigurados manualmente se o supervisor acessar um sistema e depois outro sistema.
PAra vocês entenderem, no site da empresa cada sistema fica assim:

www.sitedaempresa.com/sistemaa/
www.sitedaempresa.com/sistemab/
www.sitedaempresa.com/sistemac/
www.sitedaempresa.com/sistemad/

e cada um deles se conecta a uma base de dados diferente e existe uma pessoa que sempre vai acessar os 4 sistemas que no caso é o dono das 4 filiais.

Alguém saberia me dizer o motivo desse erro? Vejam o erro que da ao acessar um segundo sistema:

ERRO
Erro ao acessar o banco de dados
Table ‘empresaa.sistema_credito’ doesn’t exist
SelectLimit(SELECT login, nome from sistema_credito , 22, 0)

O nome da conexão é o mesmo para os 4, chamada Banco

Espero ter passado as informações necessárias.

(wanderlanlima) #2

Acho que voce deve fazer:
No login:
Pega o usuario que está se logando
Verifica se ele tem acesso ao sistema que ele está se logando
Muda a conexão em tempo de execução(nome do banco, esquema, etc)
Da acessoa as aplicações que etem direito.

Acho que a sequencia é essa.

(Reação Web) #3

Deixe ver se eu entendi!
Para cada sistema, melhor colocar um nome diferente para cada banco de dados? Digo, para as conexões do scriptcase?

(jovitomelo) #4

Pessoal,

Tenho uma aplicação (única) rodando para 34 empresas diferentes (e poderíam ser infinitas, se Deus quizer), com o mesmo banco e cada empresa tem seus próprios usuários que eles mesmos criam e gerenciam, sem qualquer interferencia minha… como?

O DB que eu uso é o MySQL.

Toda tabela tem 3 campos em comum: (owner,dta,usuario)

a) owner - é o proprietário do registro;
b) dta - data em que o registro foi criado;
c) usuário - que lançou o registro.

Criei uma função no banco chamada de PermiteAcesso. Todo acesso ao banco (grid,form,etc) tem uma cláusula WHERE com essa função, cujos parâmetros são o usuário e owner do registro.

Exempo:



WHERE PermiteAcesso_serv(’[sm_global_login]’,owner) = ‘Sim’ // Assim o usuário só tem acesso aos registros do grupo que ele participa


Meu esquema de segurança envolve 8 tabelas para controlar isso:

a) Grupos
grupos_id int(11) NOT NULL AUTO_INCREMENT,
grupos_descricao varchar(200) NOT NULL,
owner int(11) NOT NULL

b) Grupos de Acesso
grupo_acesso_id int(11) NOT NULL AUTO_INCREMENT,
grupo_acesso_descricao varchar(255) NOT NULL,
grupo_acesso_status varchar(100) NOT NULL,
owner int(11) NOT NULL

c) Grupos de Aplicação
grupo_aplicacoes_id int(11) NOT NULL AUTO_INCREMENT,
grupos_id int(11) NOT NULL,
aplicacoes_id varchar(200) NOT NULL,
grupo_aplicacoes_permissao varchar(11) NOT NULL DEFAULT ‘I;A;E;C’,
owner int(11) NOT NULL

d) Perfil de Acesso
perfil_acesso_id int(11) NOT NULL AUTO_INCREMENT,
perfil_acesso_descricao varchar(255) NOT NULL,
owner int(11) NOT NULL

e) Perfil de Grupo
perfil_grupo_id int(11) NOT NULL AUTO_INCREMENT,
perfil_acesso_id int(11) NOT NULL,
grupo_acesso_id int(11) NOT NULL,
owner int(11) NOT NULL

f) Grupo de Usuários
usuarios_id int(11) NOT NULL DEFAULT ‘0’,
grupos_id int(11) NOT NULL DEFAULT ‘0’,
owner int(11) NOT NULL

g) Usuários essa tem vários campos, mas os que controlam a segurança são
usuarios_id int(11) NOT NULL AUTO_INCREMENT,
usuarios_login varchar(200) NOT NULL,
usuarios_senha varchar(200) NOT NULL DEFAULT ‘e10adc3949ba59abbe56e057f20f883e’,
grupo_acesso_id int(11) NOT NULL,
perfil_acesso_id int(11) NOT NULL,
usuarios_datacadastro datetime NOT NULL,
owner int(11) NOT NULL

h) Aplicações
aplicacoes_id varchar(200) NOT NULL,
aplicacoes_descricao varchar(200) NOT NULL,
owner int(11) NOT NULL

*********** Início da Função ****************************
DELIMITER $$

CREATE FUNCTION PermiteAcesso(_usuario varchar(255), _acesso int(11) ) RETURNS varchar(255) CHARSET latin1
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE _grupo int DEFAULT 0;
DECLARE pesquisa1 CURSOR FOR
SELECT
perfil_grupo_id
FROM
sgci.sgci_perfil_grupo as g,
sgci.sgci_perfil_acesso as a,
sgci.sgci_usuarios as u
WHERE
g.perfil_acesso_id = a.perfil_acesso_id and
a.perfil_acesso_id = u.perfil_acesso_id and
u.usuarios_login =_usuario and
g.grupo_acesso_id = _acesso;
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done = 1;

OPEN pesquisa1;
REPEAT
FETCH pesquisa1 INTO _grupo ;
UNTIL done END REPEAT;
CLOSE pesquisa1;

IF (_grupo > 0 ) THEN
RETURN ‘Sim’;
ELSE
RETURN ‘Nao’;
END IF;
END

*************** Fim da Função ****************

Através deste sistema, aparantemente complicado, eu crio perfis de grupos que definem qual perfil de acesso tem acesso a tal grupo de acesso.

A coisa funciona ± desse jeito… é difícil explicar em poucas palavras, mas quem quizer eu envio uma aplicação pequena como exemplo.

Forte abraço.

(jovitomelo) #5

E mais,

Se fosse um único usuário por empresa não haveria necessidade de ter a tabela de Perfil de Acesso, mas como o número de usuários por empresa é ilimitado, ela se faz necessária.

(Cleyton Euler) #6

No seu contexto, é o recomendado.

(jovitomelo) #7

Cleyton,

Exatamente!
É preciso conhecer o contexto.

[]´s

(Reação Web) #8

Obrigado a todos!
Eu coloquei uma conexão com nome diferente para cada aplicativo e até agora não deu problema, por isso demorei um pouco para responder, pois estava aguardando algum problema para reabrir o tópico.