0

是否可以授予用户对视图的访问权限但限制用户访问视图从中选择的表?

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架构。我以身份登录 SQL Server Management StudiousrTenant1并尝试执行此查询:

SELECT * FROM scmTenant1.vUsers

给我错误:

对象“tUsers”、数据库“Sandbox”、模式“dbo”的 SELECT 权限被拒绝。

如果我授予此帐户对dbo架构的访问权限,则查询将正常执行。

我想我真的很想授予表的查看权限。但我的问题是您能否授予用户访问视图的权限并限制该用户访问视图从中选择的基础表?

4

1 回答 1

2

如果您将视图的所有者设为 dbo 而不是 scmTenant - 或创建执行相同操作的中间视图 - 那么您可以授予视图权限而不授予基础表权限。

IE

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 中创建一个引用该 ID 的视图。

CREATE VIEW dbo.vUsers
AS 
SELECT     ID, Username, Password 
FROM         dbo.tUsers 
WHERE        TenantID = dbo.GetCurrentTenant()
于 2012-10-23T14:38:49.147 回答