異なる「許可者」から同じ許可を複数回付与できるため、複数のエントリがあります。そのプリンシパル(「被付与者」)が2人の付与者から同じ許可をすでに付与されている場合は、この画面に同じ許可の3つのエントリが表示されます。
表示されている「重複」エントリの場合、「Grantor」列が空のエントリを使用して、同じ権限の他のエントリにリストされているものとは異なる権限付与者から同じ権限を割り当てることができます(この場合は:dbo
)。もちろん、プリンシパルとして接続しているときに、同じ付与者に対して何が許可されたアクセス許可を既に持っている追加のエントリがあるのかはわかりません。付与者ごとに1行しか持てないためです。たとえば、「付与あり」オプションを「dbo」に変更すると、「付与者」=「dbo」のエントリが更新されます。接続と同じプリンシパルに空でない「Grantor」行がある場合、GUIは接続をチェックして空の行を除外しないと思います。次に、再びwould空の行があることは理にかなっていますifこれは、「Grantor」セルがプリンシパルのドロップダウンであり、使用するプリンシパルを選択できるようにしますAS
ステートメントのGRANT
句はそうではありませんが、そうではないため、空の行を使用することは実際的ではありません。
次のことを試して、この動作を確認してください。
USE [tempdb];
CREATE USER [GrantPark] WITHOUT LOGIN;
CREATE USER [GrantWard] WITHOUT LOGIN;
CREATE TABLE dbo.MultiplePermissionsTest (Col1 INT);
SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM sys.database_permissions dp
WHERE OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';
GRANT SELECT ON dbo.MultiplePermissionsTest TO [GrantPark] WITH GRANT OPTION;
SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM sys.database_permissions dp
WHERE OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';
GRANT SELECT ON dbo.MultiplePermissionsTest TO [GrantWard];
SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM sys.database_permissions dp
WHERE OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';
GRANT SELECT ON dbo.MultiplePermissionsTest TO [GrantWard] AS [GrantPark];
SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM sys.database_permissions dp
WHERE OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';
戻り値:
permission_name state_desc Grantee Grantor
(no rows)
permission_name state_desc Grantee Grantor
SELECT GRANT_WITH_GRANT_OPTION GrantPark dbo
permission_name state_desc Grantee Grantor
SELECT GRANT_WITH_GRANT_OPTION GrantPark dbo
SELECT GRANT GrantWard dbo
permission_name state_desc Grantee Grantor
SELECT GRANT_WITH_GRANT_OPTION GrantPark dbo
SELECT GRANT GrantWard dbo
SELECT GRANT GrantWard GrantPark
次に、SSMSに移動して[システムデータベース]フォルダーを展開し、[tempdb]に移動してから、[テーブル]に移動します。 "dbo.MultiplePermissionsTest"を右クリックして、[プロパティ]、[許可]の順に移動し、[許可]を選択します。少し下にスクロールすると、「選択」の3行が表示され、それぞれ「付与者」の値が異なります:(空)、dbo
、およびGrantPark
。