0

Microsoft SQL Server 2008 に多数のレコードを含むテーブルがあります。一部のレコードにはブール フラグが設定されています。他の人はしません。

ユーザーがフラグが設定されているレコードのみを表示できるようにしたい。select ステートメントを使用してこれらのレコードを照会するビューを作成し、ユーザーにこのビューに対する読み取り権限を与えました。しかし、ビューは元のテーブルから選択するため、SQL サーバーは、ユーザーがビューを見るのに十分な権限を持っていないと言っています。

ビューとテーブルは同じデータベースにあります。

ユーザーがこのテーブルのレコードのサブセットのみを表示できるように (ビューを使用するか、他の方法を使用して) アクセス許可を設定するにはどうすればよいですか?

4

1 に答える 1

4

これは、次のように正確に機能します。

USE tempdb;
GO
CREATE TABLE dbo.MyFlags(a INT, flag BIT);
GO
INSERT dbo.MyFlags VALUES(1,0),(2,1),(3,1);
GO
CREATE VIEW dbo.vMyFlags 
AS
  SELECT a, flag FROM dbo.MyFlags WHERE flag = 1;
GO
CREATE LOGIN smudge WITH PASSWORD = 'floob', CHECK_POLICY = OFF;
GO
CREATE USER smudge FROM LOGIN smudge;
GO
GRANT SELECT ON dbo.vMyFlags TO smudge;
GO
EXECUTE AS user = 'smudge';
GO
-- from view (succeeds):
SELECT a,flag FROM dbo.vMyFlags;
GO
-- from table (error):
SELECT a,flag FROM dbo.MyFlags;
GO

おそらく、そこでの手順を見逃したか、正しいスキーマ接頭辞なしでオブジェクトを作成または参照した可能性があります。常に、常に、常にスキーマ接頭辞を使用してください

于 2013-10-14T16:12:08.113 に答える