web-dev-qa-db-ja.com

テーブル構造を非表示

ユーザーがテーブル構造を表示できないようにする方法はありますか?私は、そのテーブルに対してのみSELECT、INSERT、UPDATE、DELETEのアクセスを許可するだけです。特定のプログラマを次のように制限したい:1.彼はテーブル定義を見ることができません2.彼はストアドプロシージャを作成することができません3.保存、更新、選択およびレコードを削除する場合、そのプログラマーはこのSPを使用してレコードのアクセス/操作を行います。全体として、セキュリティ上の理由から、プログラマーにデータベースの設計を任せたくありません。

3
Fonacier

これは奇妙な要求のようですが、それは可能です。

GRANT SELECT ON YourTable TO FOO;
GRANT INSERT ON YourTable TO FOO;
GRANT UPDATE ON YourTable TO FOO;
GRANT DELETE ON YourTable TO FOO;
DENY VIEW DEFINITION ON YourTable TO FOO;

もちろん、SELECT *を発行することで列の名前を確認でき、select into新しい(場合によっては#temp)テーブルを使用して、もう少し努力してデータ型を取得できます。 。彼らはそのテーブルでインテリセンスを失うでしょう。

あなたも言う

レコードを保存、更新、選択、および削除するためのストアドプロシージャ(SP)が既にあったため、プログラマーはこのSPをレコードのアクセス/操作に使用するだけです。

その場合、おそらくテーブルに対する権限はまったく必要ありません。テーブルとストアドプロシージャの所有者が同じ場合は、プロシージャに対するexec権限を付与するだけで、所有権の連鎖を通じてプロシージャ内のテーブルへのアクセスが成功します。

6
Martin Smith

はい、sp_addextendedproperty DMV。

データベースmycompany schema usersがあり、そこに電話番号、住所、および詳細なテーブルemp_detailsを含む重要な情報を含むテーブルがあるとします。 sp_extendedpropertyを使用して、management studioでテーブルを非表示にすることができます。

用法:

EXEC sp_addextendedproperty 
@name = N'Microsoft_database_tools_support', 
@value = '<Hide? , sysname, 1>', 
@level0type ='schema', 
@level0name ='users',  --give the schema name here. if it is dbo give 'dbo'
@level1type = 'table', 
@level1name = 'emp_details'  --give the table name which you want to hide.
Go

そして、Management Studioを介して特定のユーザーに選択、挿入、更新、および削除の権限のみを提供するには

  1. Management Studioでデータベースを右クリックします。
  2. プロパティを選択
  3. 権限を選択

  4. ユーザーがリストに表示されない場合は、[検索]を選択して名前を入力します

  5. 「ユーザーまたはロール」リストでユーザーを選択します。下のウィンドウフレームで、「許可」列の下のSELECT、INSERT、UPDATE、DELETE権限を確認します。

データベースの外部クライアントにテーブルアクセスではなくVIEWアクセスのみを付与する場合。これを行うには

DENY SELECT ON table TO user;  //  To Deny on the particular table to user


GRANT SELECT ON view TO user; // To give view permission to particular user.

詳細については SQLサーバー管理スタジオでテーブルを非表示にする方法 および ここ

:-本番サーバーでスクリプトを直接実行しないでください。テストサーバーでのテストなし。

5