none
Delete RRS feed

  • Pergunta

  • Tenho uma tabela importante no sistema, e não posso deixar que o usuário consiga alterar ou deletar os registros, somente a plicação tem permissão para isto.

    Alguém tem alguma idéia de como eu posso fazer isso?

    Desde já agradeço


    Alan Cossari
    terça-feira, 29 de setembro de 2009 16:40

Respostas

  • Olá Alan,

    Sabemos que todos os usuários que são criados no banco de dados tem a permissão 'public', todavia em relação a deleção, se por acaso sua necessidade for triggers você pode utilizar a instrução abaixo, mais lembre-se de que você terá que analisar se será a escolha certa para a sua aplicação.

    create

     

    trigger teste
    on tbl_teste
    after insert,delete
    as
    raiserror ('Error, Você não pode inserir/deletar',16,10);
    GO

    []´s

    Lucas Souza
    http://www.souzalucas.spaces.live.com

    LUCAS SOUZA SARAIVA
    • Marcado como Resposta Alan Cossari quarta-feira, 30 de setembro de 2009 12:33
    terça-feira, 29 de setembro de 2009 17:31
  • Alan,

         1. Security, Logins você criará um usuário. Depois disso, basta setar as configurações de segurança deste usuário na tabela em questão, porém, lembre-se que se você quer que esse usuário altere as tabelas, ele poderá tanto pela aplicação, quanto pelo SSMS. Mas o pior é que esse usuário estará informando lá no seu arquivo app.config ou web.config. Se alguém tiver acesso à este arquivo, ele verá a senha e poderá acessar pelo SSMS e burlar sua segurança. Ou seja, leve em consideração a opção 2 abaixo!
         2. Use Windows Authentication, neste caso, não há usuário SA. Todo usuário que loga terá que logar com o seu usuário do windows, e você poderá controlar os direitos desse usuário pelo AD em conjunto com as permissões do SQL Server.
    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    • Marcado como Resposta Alan Cossari quarta-feira, 30 de setembro de 2009 12:34
    terça-feira, 29 de setembro de 2009 18:29
    Moderador
  • Alan,

    Remova do código da trigger a linha do Raiserror!!!!

    Para excluir qualquer o objeto do banco de dados no mínimo o usuário tem que ter permissões de dbadmin!!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta Alan Cossari quarta-feira, 30 de setembro de 2009 12:34
    terça-feira, 29 de setembro de 2009 20:10

Todas as Respostas

  • Cara clica com o botão direito na tabela -> permissions  -> add -> e altera as permissões dessa tabela, pode dar direito/negação da gravação para o usuário que desejar. Isso para somente essa tabelas. Existem diversas outras formas essa é uma delas...


    Att. Leandro Hexsel Bugalho
    • Sugerido como Resposta Leandro Bugalho terça-feira, 29 de setembro de 2009 16:48
    • Não Sugerido como Resposta Alan Cossari terça-feira, 29 de setembro de 2009 16:56
    terça-feira, 29 de setembro de 2009 16:47
  • Fiz o que me falou e comsegui apagar os registros...

    Eu quero proibir os deletes, fiz T-SQL.
    Alan
    • Editado Alan Cossari quarta-feira, 27 de janeiro de 2010 11:31
    terça-feira, 29 de setembro de 2009 16:57
  • Se tu deu deny data writer para o usuário na tabela e o usuário não for owner ou sysadmin ele não vai conseguir gravar não... o delete vai falhar.  


    Att. Leandro Hexsel Bugalho
    terça-feira, 29 de setembro de 2009 17:07
  • Ao owner tem como definir permissão?

    Eu não posso deixar que alterem essa tabela por nada

    Alan
    terça-feira, 29 de setembro de 2009 17:24
  • Boa tarde Alan

    Sem dúvida alguma o que vc precisa é definir corretamente as permissões, mas para fazer isso vc precisa falar em quais roles estão os usuários e quais as roles da aplicação, assim podemos verificar as permissões de cada usuário e podemos te auxiliar no que precisa ser feito abraço.
    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    terça-feira, 29 de setembro de 2009 17:26
  • Olá Alan,

    Sabemos que todos os usuários que são criados no banco de dados tem a permissão 'public', todavia em relação a deleção, se por acaso sua necessidade for triggers você pode utilizar a instrução abaixo, mais lembre-se de que você terá que analisar se será a escolha certa para a sua aplicação.

    create

     

    trigger teste
    on tbl_teste
    after insert,delete
    as
    raiserror ('Error, Você não pode inserir/deletar',16,10);
    GO

    []´s

    Lucas Souza
    http://www.souzalucas.spaces.live.com

    LUCAS SOUZA SARAIVA
    • Marcado como Resposta Alan Cossari quarta-feira, 30 de setembro de 2009 12:33
    terça-feira, 29 de setembro de 2009 17:31
  • Boa tarde Anderson...

    tentarei ser claro.

    tenho uma tabela com registros importantes, que devido a uma lei federal precisa ser inviolável.

    Por isso minha aplicação poderá fazer as alterações necessárias, mas não posso deixar que ninguém abra o sql server e altere/apague/inclua no proprio banco.

    porém, não sei definir essas permissões, por isso recorri ao fórum, gostaria de saber se é possível negar um delete inclusive para o sa, e como fazer isso.

    Obrigado
    Alan
    • Editado Alan Cossari quarta-feira, 27 de janeiro de 2010 11:32
    terça-feira, 29 de setembro de 2009 17:33
  • Lucas,

    Pode ser uma opção esta sua dica, mas não seria a melhor solução.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 29 de setembro de 2009 17:36
  • Alan,

          Acho que a melhor alternativa é você montar muito bem a sua estrutura de segurança, levando em conta o uso de Windows Authentication (se possível) em conjunto com usuários e grupos de usuários do AD.

          Evite o uso de triggers porque elas não resolvem o seu problema, porque trigger impedirá qualquer insert/update/delete, mesmo vindo da aplicação e independente de quem for o usuário.

          Se um usuário tiver direito de escrita/leitura no SQL ele terá esse direito via SSMS ou via aplicação, não importa. Ou seja, proteja seu banco no melhor ponto de proteção, a segurança dos usuários que acessarão a base.


    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    terça-feira, 29 de setembro de 2009 17:46
    Moderador
  • Alan acredito que a melhor alternativa, seja vc setar as configurações diretamente nesta tabela. para isso clique com o botao direito sobre a Table e configure as permissões específicas de cada usuário


    Espero ter ajudado
    Anderson - DBA/MCP/MCTS/MCITP/MCT - Sua pergunta foi respondida ? Marque-a como tal! www.myspace.com/andersondpa
    terça-feira, 29 de setembro de 2009 18:05
  • Anderson,

    Mas imagine se o nosso amigo tiver uma quantidade rasuável de table, isso será um trabalho braçal!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 29 de setembro de 2009 18:11
  • Não Júnior, eu só preciso proteger uma tabela.

    Mas se eu definir com um simples botão direito, o cliente remove também.

    Esse é o meu problema.


    Alan
    • Editado Alan Cossari quarta-feira, 27 de janeiro de 2010 11:32
    terça-feira, 29 de setembro de 2009 18:17
  • Alan,

    O cliente só vai remover esta permissão se ele tiver acesso ao banco de dados com perfil de usuário capaz de realizar este procedimento, para isso ele teria que ter uma senha de acesso.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 29 de setembro de 2009 18:19
  • Eu tenho 2 problemas e preciso da ajuda de vcs

    1° Criar senha de acesso ao meu banco

    2° Impedir que o próprio SA acesse o banco, somente o usuário que eu criar

    Na verdade nao precisa ser no banco totalmente.
    Apenas em uma tabela

    como eu posso fazer isso?


    Alan
    • Editado Alan Cossari quarta-feira, 27 de janeiro de 2010 11:32
    terça-feira, 29 de setembro de 2009 18:23
  • Alan,

         1. Security, Logins você criará um usuário. Depois disso, basta setar as configurações de segurança deste usuário na tabela em questão, porém, lembre-se que se você quer que esse usuário altere as tabelas, ele poderá tanto pela aplicação, quanto pelo SSMS. Mas o pior é que esse usuário estará informando lá no seu arquivo app.config ou web.config. Se alguém tiver acesso à este arquivo, ele verá a senha e poderá acessar pelo SSMS e burlar sua segurança. Ou seja, leve em consideração a opção 2 abaixo!
         2. Use Windows Authentication, neste caso, não há usuário SA. Todo usuário que loga terá que logar com o seu usuário do windows, e você poderá controlar os direitos desse usuário pelo AD em conjunto com as permissões do SQL Server.
    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    • Marcado como Resposta Alan Cossari quarta-feira, 30 de setembro de 2009 12:34
    terça-feira, 29 de setembro de 2009 18:29
    Moderador
  • O cara só o DBA deve ter a senha do SA, se tu não pode confirar no teu DBA manda ele para casa e contrata o pessoal do forum :)

    Então se teu problema é não deixar ninguem excluir e tu acha que alguem pode mudar a permissão, seta todos os usuários para deny data writee e segue a sugestão do Lucas cria uma trigger que impeça a deleção a não ser as vindas da aplicação.
    Att. Leandro Hexsel Bugalho
    terça-feira, 29 de setembro de 2009 19:24
  • Olha a trigger foi a única solução que consegui fazer e funcionou perfeitamente, exceto por 2 motivos:

    1° Aparece essa mensagem:

    Msg 50000, Level 16, State 10, Procedure Teste, Line 4

    Error, Você no pode inserir/deletar


    Tem como eu travar sem mostrar mensagem? Porque mostra o nome da trigger e alguém pode deletar, ou então
    2° como eu faço para não deixar ninguém excluir essa trigger?


    Alan
    • Editado Alan Cossari quarta-feira, 27 de janeiro de 2010 11:32
    terça-feira, 29 de setembro de 2009 19:53
  • Alan,

    Remova do código da trigger a linha do Raiserror!!!!

    Para excluir qualquer o objeto do banco de dados no mínimo o usuário tem que ter permissões de dbadmin!!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta Alan Cossari quarta-feira, 30 de setembro de 2009 12:34
    terça-feira, 29 de setembro de 2009 20:10
  • /****** Object: Trigger [dbo].[.] Script Date: 09/29/2009 17:14:53 ******/

    SET

     

    ANSI_NULLS ON

    GO

    SET

     

    QUOTED_IDENTIFIER ON

    GO

    ALTER

     

    trigger [dbo].[Teste]

    on

     

    [dbo].[Alteramarc]

    INSTEAD

    OF insert,delete

    as

     

    raiserror ('Erro, Voc no pode inserir/deletar',16,10);

    Essa é a trigger, porém, se eu removo a linha ela gera um erro.


    Alan
    terça-feira, 29 de setembro de 2009 20:15