在 SQL-Server 2008 中为租户使用视图过滤器

Mic*_*ens 2 sql-server-2008 sql-server view

我目前正在 SaaS BI 产品中创建多租户数据架构。

该产品使用共享数据库和共享架构,但具有租户视图过滤器和租户数据加密(此处的灵感来源:http : //msdn.microsoft.com/en-us/library/aa479086.aspx

创建视图过滤器时,我可以执行以下两项操作:

CREATE VIEW TenantEmployees AS
SELECT * FROM Employees WHERE TenantID = SUSER_SID()

CREATE VIEW TenantEmployees AS
SELECT * FROM Employees WHERE TenantID = SUSER_ID()
Run Code Online (Sandbox Code Playgroud)

使用 SID() 我正在使用如下所示的安全标识符:

0x3425F1595A67774ABF485CDC30285443

使用 ID() 我正在使用看起来像这样的普通标识符:

265

哪一个绝对最好用,为什么?:) 我希望两者都是绝对独特的,并且永远不会在新的用户登录中重复使用

gbn*_*gbn 7

出于这个原因,我会使用 SUSER_SID:

  • SUSER_ID在principal_id列sys.server_principals
  • SUSER_SID 是sys.server_principals由 Active Directory(Windows 登录)或 SQL Server 生成的 SID 列

如果将数据库移动到另一台服务器

  • 然后SUSER_ID几乎肯定是不同的。
  • SUSER_SID 对于 Windows 登录是相同的,但可以通过为 CREATE LOGIN 指定 SID 来使 SQL 登录相同。