ユーザーがテーブル構造を表示できないようにする方法はありますか?私は、そのテーブルに対してのみSELECT、INSERT、UPDATE、DELETEのアクセスを許可するだけです。特定のプログラマを次のように制限したい:1.彼はテーブル定義を見ることができません2.彼はストアドプロシージャを作成することができません3.保存、更新、選択およびレコードを削除する場合、そのプログラマーはこのSPを使用してレコードのアクセス/操作を行います。全体として、セキュリティ上の理由から、プログラマーにデータベースの設計を任せたくありません。
これは奇妙な要求のようですが、それは可能です。
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
権限を付与するだけで、所有権の連鎖を通じてプロシージャ内のテーブルへのアクセスが成功します。
はい、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を介して特定のユーザーに選択、挿入、更新、および削除の権限のみを提供するには
- Management Studioでデータベースを右クリックします。
- プロパティを選択
権限を選択
ユーザーがリストに表示されない場合は、[検索]を選択して名前を入力します
- 「ユーザーまたはロール」リストでユーザーを選択します。下のウィンドウフレームで、「許可」列の下の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サーバー管理スタジオでテーブルを非表示にする方法 および ここ
注:-本番サーバーでスクリプトを直接実行しないでください。テストサーバーでのテストなし。