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 Studio にログインしusrTenant1、次のクエリを実行してみます。

SELECT * FROM scmTenant1.vUsers

エラーが発生します:

オブジェクト 'tUsers'、データベース 'Sandbox'、スキーマ 'dbo' に対する SELECT 権限が拒否されました。

このアカウントにdboスキーマへのアクセスを許可すると、クエリは正常に実行されます。

テーブルにビュー権限を付与したいのですが。しかし、私の質問は、ユーザーにビューへのアクセスを許可し、そのユーザーがビューが選択する基になるテーブルにアクセスできないようにすることはできますか?

4

1 に答える 1

2

ビューの所有者を scmTenant ではなく dbo にする場合、または同じことを行う中間ビューを作成する場合は、基になるテーブルに権限を付与せずにビューに権限を付与できます。

すなわち

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()
于 2012-10-23T14:38:49.147 に答える