none
Consigo deixar somente uma tabela como ReadOnly? RRS feed

  • Pergunta

  • Amigos,

    tenho uma tabela de logradouros, e gostaria de deixar a mesma com ReadOnly, pra não ser alterada via aplicação ou via banco de dados.

    É possível uma tabela ReadOnly e as outras não?

    Obrigado
    • Movido Gustavo Maia Aguiar segunda-feira, 15 de março de 2010 00:25 (De:SQL Server - Desenvolvimento Geral)
    sábado, 13 de março de 2010 13:15

Todas as Respostas

  • Daniel,

         Você pode fazer de duas formas, via permissão da tabela, negando o direito de alterar os dados da tabela, ou então colocar essa sua tabela em um FileGroup e setar o FileGroup como Read Only, que eu acho que possa ser mais aplicável para você.

    ALTER DATABASE [SuaBase] ADD FILEGROUP [SomenteLeitura]
    
    ALTER DATABASE [SuaBase] ADD FILE (Name = N'Nome',
    FILENAME = 'c:\localizacao\arquivo.ndf')
    TO FILEGROUP [SomenteLeitura]
    
    ADD TABLE Logradouros (Codigo Int, Descricao varchar(50))
    ON [SomenteLeitura]
    
    -- Coloque todos os dados nesta tabela
    
    -- Altere o FileGroup para SomenteLeitura
    
    USE [SuaBase]
    ALTER DATABASE [SuaBase] MODIFY FILEGROUP [SomenteLeitura] READONLY
    go
    USE [Master]
    ALTER DATABASE [SuaBase] MODIFY FILEGROUP [SomenteLeitura] READONLY
    

    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    • Sugerido como Resposta Alex M. Bastos sábado, 13 de março de 2010 19:39
    sábado, 13 de março de 2010 14:00
    Moderador
  • Boa Noite,

    Além das alternativas citadas você poderia criar uma trigger para reverter qualquer atividade de escrita na tabela. Mesmo com essas alternativas, o uso do FILEGROUP marcado como READ ONLY é a alternativa mais segura. A única desvantagem é que você terá que recriar a tabela (ou utilizar a interface gráfica) para movê-la para o novo FILEGROUP.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como descobrir a data do último acesso a uma tabela ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!964.entry


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 15 de março de 2010 00:24
  • Amigos, estou em tempo de desenvolvimento, mas desde já gostaria de controlar isso.

    Uso Visual Studio Team System, modifico a base e espalho as mudanças pras outras bases via Team Foundation.
    Essas modificações de FileGroup vão ser criadas/atualizadas nas outras bases de dados? Tenho várias espalhadas (desenvolvimento, teste e produção)

    E sobre trigger, uma instead of resolveria?
    Eu poderia fazer uma trigger criptografada, pra ninguem alterar o seu código?
    terça-feira, 16 de março de 2010 13:23
  • Daniel,

    O Filegroup é específico para cada base de dados, se você criar um filegroup readonly para este banco não significa que os filegroups utilizados pelas bases espelhadas também serão read only.

    Em relação a trigger, não precisa ser uma trigger instead of, em relação a criptografia, você poderia criar uma trigger que faz a chamada a uma stored procedure criptografada. Eu prefiro criptografar stored procedure ao invês de trigger.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 16 de março de 2010 17:09
    Moderador