ユーザーはSSMSでデフォルト以外のスキーマのテーブルを表示できません


10

あるVIEW DEFINITIONユーザーのスキーマレベルで適切に権限を設定する際に問題が発生しました。スキーマTestSchemaを作成し、いくつかのテーブルを追加しました。ユーザーは、現在のアクセス許可は、アクセスに設定&(テーブルを変更しているSELECTUPDATEDELETEを介して、など)dbo_datareaderdbo_datawriterロール。ただし、SSMSオブジェクトエクスプローラーでテーブルを表示することはできません。

定義を表示する権限を付与しようとしました:

grant view definition on SCHEMA :: [TestSchema] to [User]

それはうまくいきませんでした。テーブルレベルの権限を設定してみました:

grant view definition on [TestSchema].[NewTable] to [User]

それもうまくいきませんでした。それから私は全面的な助成金を試してみました:

grant view definition to [User]

そして、それはうまくいきました。これTestSchemaで、だけでなく、アクセスしてはならない他のスキーマも表示できるようになりました。

ここでの目標は、ユーザーが特定のスキーマ内のすべてのテーブルを表示できるようにすることです。どうすればそれを達成できますか?デフォルトでこれを実行できるようにする必要がある場合、なぜそれができないのかを見つけるためにどのようなアクセス許可を確認する必要がありますか?


2008R2インスタンスでは、db_datareaderまたはdb_datawriterを付与すると、すべてのスキーマを表示できます。それがあなたが探しているものではないことは確かですが、それはあなたの設定と私のものの間に大きな違いがあるため、実際にはテストできないことを意味します。バージョンはすべて異なりますか、それとも他のセキュリティが変更されていますか?
cfradenburg 2012年

@cfradenburg-わかりにくいです。これはITによって管理されているサーバーなので、彼らが何をしたのかわかりません。私はSQL Serverの初心者なので、何を探すべきかわかりません。私の質問の一部は、他にどのような権限/役割/ ??? これは、権限によって簡単に修正できるかどうかを判断するために探す必要がありますか?
eykanal 2012年

ユーザーはテーブルにクエリを実行できますか?クエリを実行できる場合は、SSMS内の問題である可能性があります。
user9164 2012年

@ user9164はい、ユーザーはテーブルクエリできます。SSMS内でそれらを表示する問題にすぎません。
eykanal 2012年

回答:


11

短い回答:db_datareaderまたはdb_datawriter同等の拒否の同等物を使用しないでください。これらは下位互換性のみを目的としています。それらを使用すると、直面しているような問題が発生します。

プリンシパルAliceにスキーマSales内のすべてのテーブル値オブジェクトに対するSELECT、INSERT、UPDATE、およびDELETEパーミッションを付与する場合は、以下を使用します。

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

プリンシパルAliceに、すべてのスキーマ内のすべてのテーブル値オブジェクトに対するSELECT、INSERT、UPDATE、およびDELETE権限を付与する場合は、以下を使用します。

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

その後、メタデータの可視性は正しく機能します。


「後方互換性」ビットのソースはありますか?スキーマが廃止されていることを理解していますが、役割について何も見つかりません。
Stijn

0

問題の原因となっているどこかで拒否があるかもしれないプリンシパルの他のアクセス許可を見てください。拒否は常に助成金の上に適用されることに注意してください。そして、それはあなたのサーバではないので、IT部門が設定したアカウントに何か問題があるかもしれません。

サーバーレベルで次のようなものを使用します。

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

そして、データベースレベルでこのようなもの

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO

コメントをありがとう、月曜日に仕事に戻ったときにこれを試します。
eykanal 2012年

0

SQL Serverを2008R2から2014にアップグレードしたときに、これが発生しました。db_datareaderまたはdb_datawriterまたはそれらに相当する拒否は、2008R2では問題なく機能しますが、2014では機能しません。

SQL Server 2014で権限を付与する例

ユーザーAliceにスキーマSales内のすべてのテーブル値オブジェクトに対するSELECT、INSERT、UPDATE、およびDELETEパーミッションを付与する場合は、以下を使用します。

SCHEMA :: Sales TO AliceでのSELECT、INSERT、UPDATE、DELETEの付与 プリンシパルAliceに、すべてのスキーマ内のすべてのテーブル値オブジェクトに対するSELECT、INSERT、UPDATE、およびDELETE権限を付与する場合は、以下を使用します。

アリスへの選択、挿入、更新、削除の許可; その後、メタデータの可視性は正しく機能します。

リファレンス[Greenstone Walker]。


1
Sundeep、リンクを提供するだけでなく、答えを説明してみてください。ヘルプが必要な場合は、サイトツアーを
LowlyDBA '19
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.