ユーザーの1人のスキーマレベルでVIEW DEFINITION
権限を適切に設定する際に問題が発生しました。スキーマTestSchema
を作成し、いくつかのテーブルを追加しました。ユーザーは現在、dbo_datareader
およびdbo_datawriter
ロールを介してテーブル(SELECT
、UPDATE
、DELETE
など)にアクセスおよび変更するために設定された権限を持っています。ただし、SSMSオブジェクトエクスプローラーでテーブルを表示することはできません。
定義を表示する権限を付与してみました:
grant view definition on SCHEMA :: [TestSchema] to [User]
それはうまくいきませんでした。テーブルレベルの権限を設定してみました:
grant view definition on [TestSchema].[NewTable] to [User]
それもうまくいきませんでした。次に、全面的な助成金を試してみました。
grant view definition to [User]
そしてdid仕事;これで、彼らはTestSchema
だけでなく、アクセスすべきではない他のスキーマも見ることができます。
ここでの私の目標は、ユーザーが特定のスキーマ内のすべてのテーブルを表示できるようにすることです。どうすればそれを達成できますか?私がすべきこれをデフォルトで実行できる場合、なぜそれができないのかを見つけるためにどのようなアクセス許可を確認する必要がありますか?
短い答え: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 ;
その後、メタデータの可視性は正しく機能します。
問題の原因となっているどこかで拒否があるかもしれないプリンシパルの他のアクセス許可を見てください。拒否は常に助成金の上に適用されることに注意してください。そして、それはあなたのサーバではないので、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
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]。