Atualmente, estou criando uma arquitetura de dados multilocatário em um produto SaaS BI.
O produto está usando banco de dados compartilhado e esquema compartilhado, mas com filtros de exibição de locatário e criptografia de dados de locatário (inspiração encontrada aqui: http://msdn.microsoft.com/en-us/library/aa479086.aspx )
Ao criar o filtro de exibição, posso fazer os dois:
CREATE VIEW TenantEmployees AS
SELECT * FROM Employees WHERE TenantID = SUSER_SID()
CREATE VIEW TenantEmployees AS
SELECT * FROM Employees WHERE TenantID = SUSER_ID()
Usando SID(), estou usando o identificador de segurança que se parece com isto:
0x3425F1595A67774ABF485CDC30285443
Usando ID(), estou usando o identificador normal que se parece com isto:
265
Qual é o melhor absoluto para usar e por quê? :) Espero que ambos sejam absolutamente únicos e nunca sejam reutilizados em novos logins de usuários
Eu usaria SUSER_SID por este motivo:
sys.server_principals
e é gerada pelo Active Directory (login do Windows) ou SQL ServerSe você mover o banco de dados para outro servidor