質問

BOL から、アクセス許可をT-SQLのシノニムですが、シノニムをいじくり回す際に、ベースオブジェクトへのアクセス許可が既に付与されている場合にいつそれを行う必要があるかは明確ではありません。

eg。データベースBのテーブルFREDを指すシノニムがデータベースAにある場合、ユーザーJoeが[Fred]。[B]でSELECTを許可されている限り、JoeはSELECT * FROM [Fred]。[ B]。

役に立ちましたか?

解決

シノニム(データベースエンジン)の使用

  

次の許可ステートメント   シノニムにのみ関連付けられています   ベースオブジェクトではありません:(その後、GRANT、REVOKE、DENYに言及します)

その後、所有権チェーンが適用されます。

  

オブジェクトが   チェーン、SQL Serverは最初に比較します   オブジェクトの所有者からオブジェクトの所有者   呼び出しオブジェクト。これは   チェーン内の前のリンク。両方の場合   オブジェクトの所有者は同じですが、   参照されるオブジェクトの権限   評価されません。

CREATE SYNONYM dbo.FooBar FOR dbo.MyBaseProc
GO
GRANT EXECUTE ON dbo.FooBar TO MyUser
GO
REVOKE EXECUTE ON dbo.MyBaseProc TO MyUser
GO
EXEC AS USER = 'MyUser'
GO
PRINT '1'
EXEC dbo.MyBaseProc --fail
GO
PRINT '2'
EXEC dbo.bob    --pass
GO
REVERT
GO


DENY EXECUTE ON dbo.MyBaseProc TO MyUser
GO
PRINT '3'
EXEC AS USER = 'MyUser'
GO
EXEC dbo.bob    --pass, 'coz DENY aint checked...
GO
REVERT
GO

編集:あなたの質問に答えたことを願っています...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top