是否可以授予用户访问视图的权限,但是限制用户访问视图选择的表?
CREATE TABLE [dbo].[tUsers](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](50) NULL,
[Password] [nvarchar](50) NULL,
[TenantID] int
) ON [PRIMARY]
CREATE VIEW [scmTenant1].[vUsers]
AS
SELECT ID, Username, Password
FROM dbo.tUsers
WHERE TenantID = 1
SQL Server用户帐户(usrTenant1
)可以访问架构scmTenant1
,但无法访问dbo
架构。我以usrTenant1
身份登录SQL Server Management Studio并尝试执行此查询:
SELECT * FROM scmTenant1.vUsers
给我错误:
对象'tUsers',数据库'Sandbox',架构'dbo'上的SELECT权限被拒绝。
如果我授予此帐户访问dbo
架构的权限,则查询执行正常。
我认为我真的想要授予表的查看权限。但我的问题是,您是否可以授予用户访问视图的权限并限制该用户访问该视图所选择的基础表?
答案 0 :(得分:2)
如果您创建视图dbo的所有者而不是scmTenant - 或创建一个相同的中间视图 - 那么您可以授予视图权限,而不授予对基础表的权限。
即
CREATE VIEW dbo.vUsers_T1
AS
SELECT ID, Username, Password
FROM dbo.tUsers
WHERE TenantID = 1
CREATE VIEW [scmTenant1].[vUsers] as
SELECT * FROM dbo.vUsers_T1
或者,您可以创建一个函数,该函数返回当前租户的ID并创建一个引用dbo中的视图。
CREATE VIEW dbo.vUsers
AS
SELECT ID, Username, Password
FROM dbo.tUsers
WHERE TenantID = dbo.GetCurrentTenant()