6

私の会社は私たちのために小さなプロジェクトを行うために請負業者を雇いました。彼は私たちのメインデータベースの単一のビューからデータを選択する必要があります(SQL Server 2005)。

SQL Server私は彼のためにロックダウンされたログインを作成したかったのですがSELECT、「彼の」ビューからのアクセス許可だけで...他には何もありませんでした。

そこで、サーバー上に新しいユーザーを作成し、次の1つのビューでのみユーザーにアクセス許可を与えました。

grant select on SpecialView to SpecialUser;

基本的に、これは機能します。彼は、テーブルとストアドプロシージャを表示できず、「自分の」ビュー以外のビューも表示できません。

だが:

  • 彼はすべてのシステムビューにアクセスできます
  • 彼はすべてのシステムストアドプロシージャにアクセスできます。

どうやら彼のパーミッションは自動的にロックダウンされています(sys.objects彼がパーミッションを持っているオブジェクトのみをsp_who表示し、彼自身のプロセスのみを表示します)。

だから、私の質問は:

システムビューとストアドプロシージャにアクセスせずにユーザーを作成することは可能ですか?
(もしそうなら、私は何を間違っているのですか?)

または、ロックダウンされたユーザーでさえシステムビューとストアドプロシージャにアクセスする必要がある理由はありますか?

編集:
kevchadders、ユーザーはマスター、モデル、またはmsdbにアクセスできません-表示されるはずのビューを持つデータベースにのみアクセスできます。

ただし、明確にするために、ユーザーが表示できるシステムビュー/プロシージャはデータベースにあり、「彼の」ビューは...マスターデータベースにはありません。したがって、彼は同じデータベース内の1つのビューから選択する必要があるため、すべてのアクセスを無効にすることはできません。
重要なのは、彼が表示するはずの単一のビューに対してのみ明示的にアクセス許可を設定したとしても、なぜ彼はシステムビュー/プロシージャも表示するのでしょうか。

4

3 に答える 3

2

を使用しDENY VIEW DEFINITIONます。ビューとストアドプロシージャの存在を確認するユーザーの機能を削除することはできませんが、それらのコンテンツの(ほとんど)を表示する機能を削除することはできます。

deny view definition to smallperms_role 
go
sp_addrolemember 'smallperms_role ', 'smallperms_user'
go
sp_addrolemember 'db_datareader', 'smallperms_user'
go

例:
EXEC sys.sp_databases何も返しませんが、実行します。
SELECT * FROM INFORMATION_SCHEMA.TABLES何も返しませんが、エラーは返しません。

于 2010-07-16T18:51:05.973 に答える
1

ユーザーを右クリックして、[ユーザーマッピング]ページを選択します。

そこから、マスターモデル、およびmsdbデータベースからのすべてのアクセスを無効にしてみましたか?

彼はこれら3つすべてでパブリックとして設定されると思うので、パブリックロールを削除して、それらのシステムビュー/ストアドプロシージャを実行するときにログインにどのような影響があるかを確認できます。

または、テストログインを作成して実験することをお勧めします。

于 2010-07-16T10:05:36.403 に答える
0

ユーザーのPUBLICアクセスを削除することはできないと思います。(ユーザープロパティから)

データベースのプロパティから、PUBLICへのアクセス許可を拒否できます。

  • DBを右クリック
  • プロパティに移動
  • 権限に移動
  • GUESTロールの権限を変更します。

ただし、MasterまたはTemp dbsの「CONTROL」権限を拒否することはできません。また、MASTERのSELECTを拒否すると、サーバーにログインできません。

于 2010-07-16T12:58:32.203 に答える