BANCOS SQL (APP E MASTER) SERVIDOR / INSTÂNCIA

LUIS.HERRERA 16/04/2014 10:21:24
#437341
Bom dia!
Me surgiram algumas dúvidas, após TERMINAR as rotinas em C# para Criar/Alterar e Excluir (User e Login) no SQL Server, tanto no banco master como no banco do meu app.

1) Quando se cria uma NOVA instância do SQL Server ela também tem seu próprio banco master ou só existe um único banco master para todo o servidor SQL? Se eu trabalhar com uma instância (configurada pelo TI como na string ao final) isso independe se moveram o meu banco (app) para outro servidor (hardware)? quem controla isso no caso é o próprio SQL Server?

2) Eu criei um Login no máster e um User no meu banco associado a este Login para cada usuário do meu programa. Isso para ajudar o TI a rastrear quem e o que cada um faz no meu sistema pelo SQL. Para manipular apenas dados do meu banco (NÂO é a estrutura dele), é preciso ter este USER no meu banco ou apenas o LOGIN no master já seria suficiente?

3) Eu incluí os parâmetros db_datareader e db_dataWriter para cada USER no meu banco. Estes parâmetros servem para manipular os dados do meu banco ou são apenas para manipular a estrutura do próprio banco? Pois preciso apenas manipular os DADOS.

Como minha string de conexão é:
[Ô]server=[Ô] + myServer + [Ô]\\[Ô] + myInstancia + [Ô];database=[Ô] + mybanco + [Ô];user=[ô][Ô] + usuario + [Ô][ô];pwd=[Ô] + senha + [Ô];Trusted_Connection=False;[Ô];


Acabei ficando confuso com as várias formas de configurarem o SQL Server, entre instâncias, Servidores diferentes, etc... e se isso pode comprometer o funcionamento do meu sistema como eu fiz, pois estou com uma única instância e bancos master e o meu juntos.
KERPLUNK 16/04/2014 15:15:39
#437354
1 - Instância, é o serviço do SQL Server. Você pode instalar múltiplas instâncias e cada uma terá seu próprio banco master. Por exemplo se você instalar um serviço com o nome de SQLEXPRESS(o padrão) e outro SQLEXPRESSDOIS na mesma máquina, cada uma terá seu banco master e podem ser usadas na string de conexão assim:
[Ô]server=192.168.xxx.xxx\\SQLEXPRESS;database=mybanco;user=[ô]usuario[ô];pwd=senha;Trusted_Connection=False;[Ô];
ou
[Ô]server=192.168.xxx.xxx\\SQLEXPRESSDOIS;database=mybanco;user=[ô]usuario[ô];pwd=senha;Trusted_Connection=False;[Ô];
Ambas as strings de conexão estão corretas, ambas apontam para uma mesma máquina, mas cada uma para uma instância diferente do serviço.
Onde está rodando o serviço é indiferente, basta apontar para o local certo.

2 - Depende de como está montado seu sistema. Você pode ter roles de usuário controladas pelo banco ou pela aplicação.

3 - db_datareader e db_dataWriter são roles para usuários do banco, usuários membros delas, herdam todas as diretivas de segurança dela.

Agora eu pergunto, afinal, está controlando o acesso dos usuários como? Por banco ou por alguma rotina na aplicação?
LUIS.HERRERA 16/04/2014 17:09:39
#437362
No meu sistema tenho um cadastro de funcionários com o nome de usuário. Este nome meu sistema cria o Login no máster e o User no meu banco associado a este Login. O controle de usuários é feito pelo SQL Server, pois como crio os logins e user ele faz controla (autenticação SQL) inclusive as senhas eu não me preocupo com isso.

Ao logar no meu sistema eu verifico se o usuário digitado existe no banco (Login e senha) se o SQL reconhecer ok, ai verifico no meu sistema se o usuário existe para saber se não foi criado manualmente no SQL, mas não existe no meu sistema, só então verifico as permissões de acesso e libero o sistema ao usuário.

Nos itens 2 e 3 eu não criei nenhum role específico, mas associei o db_datareader e db_datawriter, mas não sei se isso é necessário, pois estou achando que isso é para alterar a estrutura do banco e não está relacionada com consulta ou edição dos dados no meu banco, assim não seria necessário ter esses db_....mas não achei nada claro sobre isso, pois este motivo minha dúvida.

Da mesma forma se seria necessário ter o User no meu banco, ou somente o Login no máster do SQL Server para acessar meu banco, pois tem empresas que poderão ter centenas de usuários, e assim evitaria de encher o SQL com um monte de user desnecessários.
Tópico encerrado , respostas não são mais permitidas