Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, amigos.
Há um tempo eu desenvolvi uma ferramenta que iria ser usada por muitas pessoas, então ao invés de eu deixar o ID comum (identity), como o ID do registro, eu deixei o ID como campo varchar default newid(). Ele criava IDs sempre diferentes um do outro e ficava mais ou menos assim:
1B2848FD-2DB2-4100-95AB-F1D1552BF2E8
Claro que eu tinha alguns problemas, pois não tinha como recuperar o último registro inserido através do @@identity, por exemplo, mas por outro lado, aumentei a segurança, já que os usuários não tinham uma noção concreta do id dos registros, pois eles não eram sequenciais...
A minha dúvida apenas é: está errado usar newid como id do registro? Existe alguma forma mais eficaz, mas mais segura quanto o newid de usar? Ou vcs não vêem problema nenhum em usar o ID sequencial identity?
>
Olá Cesão,
creio que usando o new ID, seja mais seguro em relação a duplicação pois ele nunca irá repetir-se, mas perde-se com armazenamento, pois vai usar mais espaço que um INT por exemplo, e tb. isso num banco muito grande não irá ter um desempenho como o INT, inclusive na indexação, sempre uso Identity sequencial e nunca tive problemas
Ah sim, mas o que eu fico preocupado, é pelos usuários. Claro que vou criar verificações em todas as páginas para permitir que se alterem apenas dados que possam ser alterados, mas digo pelo seguinte: não queria que, mesmo o administrador do sistema, colocasse ?ID=5 no final da pagina, por exemplo, e alterasse dessa forma, entende? Não queria que fosse sequencial para que os usuários não tentassem burlar a lógica dessa forma.
As únicas implicações negativas de usar o NEWID são essas mesmas?
>
Ah sim, mas o que eu fico preocupado, é pelos usuários. Claro que vou criar verificações em todas as páginas para permitir que se alterem apenas dados que possam ser alterados, mas digo pelo seguinte: não queria que, mesmo o administrador do sistema, colocasse ?ID=5 no final da pagina, por exemplo, e alterasse dessa forma, entende? Não queria que fosse sequencial para que os usuários não tentassem burlar a lógica dessa forma.
As únicas implicações negativas de usar o NEWID são essas mesmas?
entendi, mas creio que nessa parte do ?ID=5 o pessoal da programação poderia mudar para passar os parâmetros por contexto, session alguma outra forma, não acho muito trivial usar o newID como PK, pelo menos ainda não vi um caso de uso com isso
abs
Então, eu uso num projeto aqui da agência. www.quantanoticia.com.br.
Dê uma olhada. É que não sei apenas se isso é correto ou nao.
Cesao, beleza?!
Passar parametros pela URL abre-se uma gama de possibilidades para injection =\ msm que nao seja com id sequenciais....
O que o eriva eh uma otima ideia, passar parametros por session.
No proprio VS (que vem junto com o SQL2008) eh possivel ter exemplos de como se fazer....
newid como pk nunca vi tb, e em particular, deve ter algum problema com performance nao?! jah que a alocacao de dados para id eh maior....
Olá Cesão,
creio que usando o new ID, seja mais seguro em relação a duplicação pois ele nunca irá repetir-se, mas perde-se com armazenamento, pois vai usar mais espaço que um INT por exemplo, e tb. isso num banco muito grande não irá ter um desempenho como o INT, inclusive na indexação, sempre uso Identity sequencial e nunca tive problemas