私は答えはノーだと思いますが、誰かにSQL Server
データベースへのアクセスを許可したいと思っていますが、本当に1つのテーブルへのアクセスを許可したいだけです。
誰かが1つのデータベースにのみアクセスできるように制限するのは簡単ですが、1つのテーブルに制限できるかどうかはわかりません。
私の考えは、他のテーブルの同義語で別のデータベースを作成し、そのデータベースへのアクセスを制限することでしたが、誰かがもっと良い方法を考えられるかどうか疑問に思いました。
また、アクセス許可の競合があると思うので、それが機能するとは確信していません。
はい。
exec sp_msforeachtable "DENY SELECT ON ? TO [username];"
GO
GRANT SELECT ON [schemaName].[tableName] to [username]
Go
それが機能している間は、おそらく roles およびADグループを使用して権限を管理する方が良いでしょう。
すべてのテーブルをループしてアクセスを拒否する場合の問題は、新しいテーブルを追加する場合です。
重要なことは、ユーザーにデータベース全体への「db_datareader」アクセス権を与えないことです。ログインの下で[ユーザーマッピング]タブを使用できるUIを使用して、「パブリック」アクセスのみを持つユーザーを作成できます。次に、データベースに移動して、そのユーザーに特定のテーブルへのSELECTアクセス権を付与できます([セキュリティ保護可能なアイテム]タブの下の奇妙な名前の[検索]ボタンをクリックして)。
もちろん、このアプローチはスクリプトでも機能します。
GRANT SELECT ON [SchemaName].[TableName] to [UserName]
もちろん。 [〜#〜] grant [〜#〜] 必要な権限。
ユーザーにデータベースへのアクセス権を付与する場合は、ユーザーに割り当てられているロールと、それらのロールが持つ権限を確認してください。
問題は、人々は一般に、最初は広すぎる許可を与えることです。
できますよ。ユーザーを作成してデータベースへのアクセスを許可したら、そのテーブルへの選択アクセス(またはユーザーが必要とする任意のレベル)のみを許可します。