web-dev-qa-db-ja.com

SQL Server:アクセスを1つのテーブルのみに制限できますか

私は答えはノーだと思いますが、誰かにSQL Serverデータベースへのアクセスを許可したいと思っていますが、本当に1つのテーブルへのアクセスを許可したいだけです。

誰かが1つのデータベースにのみアクセスできるように制限するのは簡単ですが、1つのテーブルに制限できるかどうかはわかりません。

私の考えは、他のテーブルの同義語で別のデータベースを作成し、そのデータベースへのアクセスを制限することでしたが、誰かがもっと良い方法を考えられるかどうか疑問に思いました。

また、アクセス許可の競合があると思うので、それが機能するとは確信していません。

18
Andrew Newland

はい。

exec sp_msforeachtable "DENY SELECT ON ? TO [username];"
GO

GRANT SELECT ON [schemaName].[tableName] to [username]
Go 

それが機能している間は、おそらく roles およびADグループを使用して権限を管理する方が良いでしょう。

29
Mitch Wheat

すべてのテーブルをループしてアクセスを拒否する場合の問題は、新しいテーブルを追加する場合です。

重要なことは、ユーザーにデータベース全体への「db_datareader」アクセス権を与えないことです。ログインの下で[ユーザーマッピング]タブを使用できるUIを使用して、「パブリック」アクセスのみを持つユーザーを作成できます。次に、データベースに移動して、そのユーザーに特定のテーブルへのSELECTアクセス権を付与できます([セキュリティ保護可能なアイテム]タブの下の奇妙な名前の[検索]ボタンをクリックして)。

もちろん、このアプローチはスクリプトでも機能します。

8
mike nelson
GRANT SELECT ON [SchemaName].[TableName] to [UserName]
3
kd7

もちろん。 [〜#〜] grant [〜#〜] 必要な権限。

ユーザーにデータベースへのアクセス権を付与する場合は、ユーザーに割り当てられているロールと、それらのロールが持つ権限を確認してください。

問題は、人々は一般に、最初は広すぎる許可を与えることです。

2
Cade Roux

できますよ。ユーザーを作成してデータベースへのアクセスを許可したら、そのテーブルへの選択アクセス(またはユーザーが必要とする任意のレベル)のみを許可します。

0
Brian