5

MSDNドキュメントにsys.database_permissionsは、状態列は「G」、「D」、「R」、または「W」のいずれかであると記載されています。'R'値には'REVOKE'の説明があり、この値を持つ行が取り消された権限に対応するように聞こえます。ただし、のドキュメントREVOKEからわかるように、権限を取り消すと完全に削除されるため、から行を削除するだけでよいと思いsys.database_permissionsます。これは、許可の付与と取り消しをテストしたときに起こったことです。GRANT許可がそのビューに表示された後、およびそれREVOKEが消えた後。

私の質問:このビューには、状態が「R」に設定された行が含まれるのはどのような状況ですか?コードでこのビューを調べるときに「R」行を処理する必要があるかどうかわからないため、これを求めています。

これが発生する可能性のあるいくつかの潜在的なシナリオを考えることができますが、確認は見つかりませんでした。

  • 包括的権限を付与してから、包括的権限によって暗示されるより詳細な権限を取り消すと、「R」行が表示される場合があります(詳細な権限は「R」として表示されます)。これまでのところ、そのような権限は見つかりませんでした。
  • SQLがコマンドを処理している間、「R」行が非常に短時間表示さREVOKEれ、行全体が消える場合があります。私はこれを観察していませんが、おそらくそれが現れる時間の非常に小さなウィンドウしかありません。
4

3 に答える 3

5

テーブルやビューなど、列のアクセス許可を持つことができるオブジェクトの場合、オブジェクトのアクセス許可の存在DENYまたはGRANTオブジェクトのアクセス許可ではREVOKE、列のアクセス許可を永続化する必要があります。以下は、SQL Server 2008でテストされた実際の例であり、状態のあるレコードRがに存在できる場合を示していsys.database_permissionsます。GRANTandステートメントの順序REVOKEが逆になると、状態のあるレコードは保持されRません。

https://gist.github.com/mches/d2282946fbe7f50a708b

CREATE USER RevokeTestUser WITHOUT LOGIN;

REVOKE CONNECT TO RevokeTestUser AS dbo;

CREATE TABLE dbo.RevokeTest (
     col int NOT NULL
);

GRANT SELECT ON dbo.RevokeTest TO RevokeTestUser AS dbo;
REVOKE SELECT ON dbo.RevokeTest (col) TO RevokeTestUser AS dbo;

SELECT *
FROM sys.database_permissions
WHERE grantee_principal_id = DATABASE_PRINCIPAL_ID(N'RevokeTestUser');

DROP USER RevokeTestUser;

DROP TABLE dbo.RevokeTest;

SELECTステートメントの結果は次のとおりです。

class   class_desc         major_id     minor_id    grantee_principal_id   grantor_principal_id   type   permission_name   state   state_desc
1       OBJECT_OR_COLUMN   1081939822   0           31                     1                      SL     SELECT            G       GRANT
1       OBJECT_OR_COLUMN   1081939822   1           31                     1                      SL     SELECT            R       REVOKE
于 2015-05-20T19:35:06.127 に答える
1

TwitterでJackRichinsが回答したように(転送してくれた@Remus Rusanuに感謝します):

テーブルまたはビューの権限と矛盾する列レベルの権限が発生すると思います。

私はこれをテストしました、そして彼は正しいです。

于 2012-08-20T15:13:15.023 に答える
0

はい、sys.database_permissionsテーブルに状態Rの行が含まれている可能性があります。Rは取り消しを意味し、テーブルの状態列に表示されます。

Rに加えて、D(拒否)、G(許可)、W(許可オプション付きの許可)を使用することもできます。

この状態列のデータ型はchar(1)になります

理解を深めるには、以下のリンクを参照してください。

http://msdn.microsoft.com/en-us/library/ms188367.aspx

于 2012-04-19T10:14:49.800 に答える