web-dev-qa-db-ja.com

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

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

定義を表示する権限を付与してみました:

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

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

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

それもうまくいきませんでした。次に、全面的な助成金を試してみました。

grant view definition to [User]

そしてdid仕事;これで、彼らはTestSchemaだけでなく、アクセスすべきではない他のスキーマも見ることができます。

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

9
eykanal

短い答え:db_datareaderdb_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 ;

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

11

問題の原因となっているどこかで拒否があるかもしれないプリンシパルの他のアクセス許可を見てください。拒否は常に助成金の上に適用されることに注意してください。そして、それはあなたのサーバではないので、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
0
Nick Winstanley

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]。

0
Sundeep